1 #include <iostream>
2 #include <cstdio>
3 using namespace std;
4 #define maxSize 100
5 typedef struct{
6 int data[maxSize]; // 存放顺序表元素的数组
7 int length; //存放顺序表的长度
8 }Sqlist; //顺序表定义的类型
9
10 // 但在考试中常用如下方式:
11 int A[maxSize];
12 int n;
13 void initList(Sqlist &L){
14 L.length = 0;
15 }
16 //在顺序表查找第一个值等于e的元素,并返回其下标
17 int FindElem(Sqlist L, int e){
18 for(int i = 0;i < L.length; ++i)
19 if(e == L.data[i])
20 return i;
21 return -1;
22 }
23 //用e返回顺序表中制定位置p(0<=p<=length-1)位置上的元素
24 int getElem(Sqlist L,int p,int &e){ //e要改变,所以用引用型
25 if(p < 0 || p >L.length-1) //p越界错误时返回-1
26 return -1;
27 e = L.data[p];
28 return 1;
29 }
30 // 在顺序表的第p(0<=p<=length)个位置上插入新的元素e(可插入的位置为length+1)
31 int insertElem(Sqlist &L, int p, int e){ //L本身要发生改变,所以用引用型
32 if(p < 0 || p > L.length || L.length==maxSize)
33 //位置是错的或者已经达到顺序表的最大允许值,插入不成功,返回0
34 return 0;
35 for(int i=L.length-1; i>=p;--i)
36 L.data[i+1] = L.data[i]; //从后往前,逐个将元素后移一位
37 L.data[p] = e; //将e放在插入位置P上
38 L.length++; //表内元素多了一个,表长加1
39 return 1; //插入成功,返回1
40 }
41
42 //删除顺序表L中下标为p(0<=p<=length)的元素,成功返回1,否则返回0,并将被删除元素的值赋给e
43 int deleteElem(Sqlist &L,int p ,int &e){ //顺序表和e都要改变,用引用型
44 if(p < 0 || p > L.length-1)
45 return 0;
46 e = L.data[p]; //将被删除元素赋给e
47 for(int i = p; i<L.length-1; i++)
48 L.data[i] = L.data[i+1]; //删除元素后面的元素要依次前移一个位置
49 L.length--; //表长减1
50 return 1; //删除成功,返回1
51 }
52 int main()
53 {
54 //测试 顺序表
55 Sqlist L;
56 initList(L);//空表
57 insertElem(L,0,1);//第0个位置插入1
58 cout<<L.length<<endl;//此时顺序表的长度为1
59 insertElem(L,1,2);
60 insertElem(L,2,3);
61 cout<<FindElem(L,2)<<endl;//查找值为2的元素返回其下标未找到返回-1
62 int e;
63 //获取下标为1的元素
64 cout<<getElem(L,1,e)<<endl;
65 cout<<e<<endl;
66 //删除下标为0的元素
67 deleteElem(L,0,e);
68 cout<<e<<endl;
69 cout<<L.length<<endl;
70 return 0;
71 }