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 }