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 }