顺序表的相关操作
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MaxSize 50 4 typedef int ElemType; 5 //静态分配 6 typedef struct{ 7 ElemType data[MaxSize]; 8 int length; 9 }SqList; 10 //动态分配 11 #define InitSize 100 12 typedef struct{ 13 ElemType *data; 14 int capacity;//动态数组的最大容量 15 int length; 16 }SeqList; 17 //i代表插入的位置,从1开始 18 bool ListInsert(SqList &L,int i,ElemType e) 19 { 20 //判断要插入的位置是否合法 21 if(i<1||i>L.length+1) return false; 22 if(L.length>=MaxSize) return false; 23 //移动顺序表中的元素 24 for(int j=L.length;j>=i;j--){ 25 L.data[j]=L.data[j-1]; 26 } 27 L.data[i-1]=e;//数组下标从零开始,插入第一个位置,访问的下标为0 28 L.length++; 29 return true; 30 } 31 //删除使用元素e的引用的目的是拿出对应的值 32 bool ListDelete(SqList &L,int i,ElemType &e) 33 { 34 //如果删除的位置是不合法 35 if(i<1||i>L.length) return false; 36 //获取顺序表中对应的元素,赋值给e 37 e=L.data[i-1]; 38 for(int j=i;j<L.length;j++){ 39 L.data[j-1]=L.data[j]; 40 } 41 //删除一个元素,顺序表长度减1 42 L.length--; 43 return true; 44 } 45 //查找成功,返回位置,位置从1开始,查找失败,返回0 46 int LocateElem(SqList L,ElemType e) 47 { 48 int i; 49 for(i=0;i<L.length;i++){ 50 if(L.data[i]==e){ 51 //加1就是元素在顺序表中的位置 52 return i+1; 53 } 54 } 55 return 0; 56 } 57 //打印顺序表元素 58 void PrintList(SqList &L) 59 { 60 for(int i=0;i<L.length;i++){ 61 printf("%4d",L.data[i]); 62 } 63 printf("\n"); 64 } 65 int main() 66 { 67 //顺序表的名称 68 SqList L; 69 //查看返回值 70 bool ret; 71 //要删除的元素 72 ElemType del; 73 //首先手动在顺序表中赋值 74 L.data[0]=1; 75 L.data[1]=2; 76 L.data[2]=3; 77 L.length=3;//总计三个元素 78 PrintList(L); 79 ret=ListInsert(L,2,60); 80 if(ret){ 81 printf("插入成功\n"); 82 PrintList(L); 83 }else{ 84 printf("插入失败\n"); 85 } 86 ret=ListDelete(L,1,del); 87 if(ret){ 88 printf("删除成功\n"); 89 printf("删除元素值为 %d\n",del); 90 PrintList(L); 91 }else{ 92 printf("删除失败\n"); 93 } 94 ret=LocateElem(L,60); 95 if(ret){ 96 printf("查找成功\n"); 97 printf("元素位置为 %d\n",ret); 98 }else{ 99 printf("查找失败\n"); 100 } 101 //停在控制台窗口 102 system("pause"); 103 }