1.从键盘依次输入10个整数(彼此以若干空格隔开),在内存中建立一个顺序表。然后完成以下操作:
① 查找:输入一个欲查找的整数,找到则显示第一个相匹配的整数在顺序表中所处的位置,若不存在,则显示"Not Found"。
② 删除:输入一个表示欲删除整数的位置的整数i(注意i的合法性),在顺序表中删除该数,并保证删除后依然是顺序表。
③ 插入:输入一个欲插入位置i和欲插入元素e,将e插入到第i个整数之前(注意i的合法性)。
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define MAXSIZE 30 4 typedef int DataType; 5 6 typedef struct node 7 { 8 DataType data[MAXSIZE]; 9 int length; 10 } SeqList,* PSeqList; 11 //typedef SeqList* PSeqList; 12 13 14 PSeqList Init_SeqList( ); 15 PSeqList Create_SeqList(PSeqList PL); 16 int Location_SeqList (PSeqList PL, DataType x); 17 int Delete_SeqList(PSeqList PL,int i ); 18 int Insert_SeqList(PSeqList PL,int i,DataType x); 19 Print_SeqList(PSeqList PL); 20 21 main() 22 { 23 int t=1; 24 int op; 25 DataType x; 26 int flag; 27 int l; 28 PSeqList PL; 29 30 31 while(t) 32 { 33 printf(" "); 34 printf(" ---顺序表--- "); 35 printf(" *******************************************"); 36 printf(" * 1---初始化及创建 *"); 37 printf(" * 2---查找 *"); 38 printf(" * 3---删除 *"); 39 printf(" * 4---插入 *"); 40 printf(" * 0---退 出 *"); 41 printf(" *******************************************"); 42 printf(" 请选择菜单号(0--4):"); 43 scanf("%d",&op); 44 switch(op) 45 { 46 47 case 1: 48 PL=Init_SeqList();//初始化顺序表 49 PL=Create_SeqList(PL); 50 printf("新创建的顺序表为:"); 51 Print_SeqList(PL); 52 break; 53 54 case 2: 55 printf("查找 "); 56 printf("请输入待查找元素x "); 57 scanf("%d",&x);//输入待查找数值 58 Print_SeqList(PL); 59 flag=Location_SeqList (PL,x);//调用查找函数 60 if(!flag) 61 printf("Not Found "); 62 else 63 printf("待查找的x在顺序表中的位置为%d ",flag); 64 break; 65 66 case 3: 67 printf("删除 "); 68 printf("请输入待删除元素的位置l: "); 69 scanf("%d",&l); 70 Delete_SeqList(PL,l);//调用删除函数 71 Print_SeqList(PL); 72 break; 73 74 case 4: 75 printf("插入 "); 76 printf("请输入待插入元素的位置l:"); 77 scanf("%d",&l); 78 printf("请输入待插入的元素x:"); 79 scanf("%d",&x); 80 Insert_SeqList(PL,l,x); 81 Print_SeqList(PL); 82 break; 83 case 0: 84 t=0; 85 printf(" 程序结束! "); 86 break; 87 88 default: 89 printf(" 输入错误!请重新输入! "); 90 break; 91 92 } 93 94 } 95 96 97 } 98 99 100 101 PSeqList Init_SeqList(void) 102 { /*创建一顺序表,入口参数无,返回一个指向顺序表的指针,指针值为零表示分配空间失败*/ 103 PSeqList PL; 104 PL=( PSeqList )malloc(sizeof(SeqList)); 105 if (PL) /*若PL=0表示分配失败*/ 106 PL->length=0; 107 return (PL); 108 } 109 110 PSeqList Create_SeqList(PSeqList PL) 111 { 112 int i,n; 113 printf("请输入需初始化的元素个数 "); 114 scanf("%d",&n); 115 printf("请输入%d个整数,中间用空格隔开: ",n); 116 for(i=0;i<n;i++)//输入10个整数 117 { 118 scanf("%d",&PL->data[i]); 119 PL->length++; 120 } 121 return (PL); 122 123 124 } 125 126 int Location_SeqList (PSeqList PL,DataType x) 127 { /*顺序表检索,入口参数:为顺序表指针,检索元素,返回元素位置,-1表示表不存在,0表示查找失败*/ 128 int i; 129 if (! PL) 130 { 131 printf("表不存在"); 132 return(-1); /*表不存在,不能检索*/ 133 } 134 i=0; 135 while (i<PL-> length && PL->data[i]!= x) 136 i++; 137 if (i>=PL-> length) 138 return 0; 139 else 140 return (i+1); 141 142 } 143 144 int Delete_SeqList(PSeqList PL,int i) 145 { /*顺序表删除,入口参数:顺序表指针,删除元素位置,返回标志1表示成功,0表示删除位置不合法,-1表示表不存在*/ 146 int j; 147 if (! PL) 148 { 149 printf("表不存在"); 150 return(-1); /*表不存在,不能删除元素*/ 151 } 152 if(i<1 || i> PL -> length) /*检查删除位置的合法性*/ 153 { 154 printf ("删除位置不合法"); 155 return(0); 156 } 157 //*x= PL ->data[i-1]; 158 for(j=i;j< PL -> length; j++) 159 PL ->data[j-1]=PL ->data[j]; //向上移动 160 PL-> length --; 161 return (1); /*删除成功*/ 162 } 163 164 int Insert_SeqList(PSeqList PL,int i,DataType x) 165 { /*顺序表插入,入口参数:顺序表指针,插入位置,插入元素,返回标志,1表示成功,0表示插入位置不合法,-1表示溢出,-2表示表不存在*/ 166 int j; 167 if (!PL) 168 { 169 printf("表不存在"); 170 return(-2); /*表不存在,不能插入*/ 171 } 172 if (PL-> length >= MAXSIZE) 173 { 174 printf("表溢出"); 175 return (-1); /*表空间已满,不能插入*/ 176 } 177 178 if(i<1||i>PL->length+1) 179 { 180 printf("插入位置不合法"); 181 return(0); 182 } 183 184 for(j= PL->length-1;j>=i-1;j--) 185 PL->data[j+1]= PL ->data[j]; //移动元素 186 PL->data[i-1]=x;//PL->data[i-1]=x; 187 PL->length++; 188 return (1); 189 } 190 191 Print_SeqList(PSeqList PL) 192 { 193 int i; 194 if(!PL) 195 { 196 printf("无此顺序表"); 197 return -1; 198 } 199 if(PL->length==0) 200 { 201 printf("空表"); 202 return 0; 203 } 204 205 printf("顺序表的长度为%d",PL->length); 206 printf("顺序表的各元素值为:"); 207 for(i=0;i<=PL->length-1;i++) 208 printf("%4d",PL->data[i]); 209 return 1; 210 211 }