顺序表的相关操作

  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 }

 

posted @ 2020-03-21 14:39  午夜的行人  阅读(49)  评论(0编辑  收藏
Live2D