1 #include<stdio.h>
  2 #define MAXSIZE 20
  3 
  4 typedef int ElemType;
  5 typedef struct
  6 {
  7     ElemType data[MAXSIZE];
  8     int length;
  9 }SqList;
 10 
 11 void InitList(SqList *L)
 12 {
 13     L->length=5;
 14     int i;
 15     for(i=0;i<5;i++)
 16     {
 17         L->data[i]=i+1;
 18     }
 19     return;
 20 }
 21 int ListLength(SqList L)
 22 {
 23     return L.length;
 24 }
 25 bool ListEmpty(SqList L)
 26 {
 27     if(L.length==0)return false;
 28     else return true;
 29 }
 30 
 31 void ClearList(SqList *L)
 32 {
 33     L->length=0;
 34     return;
 35 }
 36 
 37 bool GetElem(SqList L,int i,int *e)
 38 {
 39     if(i==0||i>L.length||L.length==0)return false;
 40     else 
 41     {
 42         *e=L.data[i-1];
 43         return true;
 44     }
 45 }
 46 int LocateElem(SqList L,int e)
 47 {
 48     int i;
 49     if(L.length==0)return 0;
 50     else{
 51     for(i=0;i<L.length;i++)
 52     {
 53         if(L.data[i]==e)
 54         {
 55             return i+1;
 56             break;
 57         }
 58         else if(i==L.length-1&&L.data[L.length-1]!=e)
 59         {
 60             return 0;
 61             break;
 62         }
 63     }}
 64 }
 65 bool ListInsert(SqList *L,int i,int e)
 66 {
 67     if(i<=0||i>L->length+1||L->length==MAXSIZE)return false;
 68     else {
 69         //插入数据位置不在表尾
 70         if(i<=L->length){
 71         int k;
 72         for(k=L->length-1;k>=i-1;k--)
 73         {
 74             L->data[k+1]=L->data[k];
 75         }}
 76         L->data[i-1]=e;
 77         L->length++;
 78         return true;
 79     }
 80 }
 81 void PrintList(SqList L)
 82 {
 83     int i;
 84     for(i=0;i<L.length;i++)
 85     {
 86         printf("%d ",L.data[i]);
 87     }
 88     printf("\n");
 89     return;
 90 }
 91 bool ListDelete(SqList *L,int i,int *e)
 92 {
 93     if(L->length==0||i<=0||i>L->length)return false;
 94     else
 95     {
 96         *e=L->data[i-1];
 97         if(i<L->length)//删除位置不在表尾
 98         {
 99             int k;
100             for(k=i;k<L->length;k++)
101             {
102                 L->data[k-1]=L->data[k];
103             }
104         }
105         L->length--;
106         return true;
107     }
108 
109 }
110 int main()
111 {
112     SqList L;
113     //初始化
114     InitList(&L);
115     //判断是否为空
116     if(ListEmpty(L))printf("非空\n");
117     else printf("空\n");
118     //读取顺序表中元素个数
119     printf("顺序表中元素个数为%d\n",ListLength(L));
120     //读取
121     int i,e;
122     printf("请输入您要读取的数字序号:");
123     scanf("%d",&i);
124     if(GetElem(L,i,&e))
125         printf("第%d个元素是%d\n",i,e);
126     else if(!GetElem(L,i,&e))
127         printf("发生错误请重新输入\n");
128     //查找
129     printf("请输入您要查找的数字:");
130     scanf("%d",&e);
131     if(LocateElem(L,e)!=0)printf("您查找的数字序号为%d\n",LocateElem(L,e));
132     else printf("您查找的数字不存在\n");
133     //插入
134     printf("请输入您要插入的数字:");
135     scanf("%d",&e);
136     printf("请输入您要插入的位置:");
137     scanf("%d",&i);
138     ListInsert(&L,i,e);
139     printf("插入后的顺序表如下:\n");
140     PrintList(L);
141     //删除
142     printf("请输入您要删除的数字位置:");
143     scanf("%d",&i);
144     ListDelete(&L,i,&e);
145     printf("您删除的数字为%d\n",e);
146     printf("删除后的顺序表如下:\n");
147     PrintList(L);
148     //清空
149     ClearList(&L);
150     //判断是否为空
151     if(ListEmpty(L))printf("非空\n");
152     else printf("空\n");
153     return 0;
154 }