(一)顺序表
(1)顺序表的结构体定义
typedef struct { int data[maxSize]; //默认int型,根据题目要求自行改变 int length; } Sqlist
考试常用顺序表定义
int A[maxSize]; //定义了一个长度为n,表内元素为整数的顺序表 int n;
(2)初始化顺序表表,创建一个空的线性表
void initList(Sqlist &L) //表L本身要改变,所以使用引用型 { L.length=0; }
(3)判断顺序表是否为空
int IsEmpty(Sqlist L) { return L.length==0; }
(4)顺序表中按元素值查找
在顺序表中查找第一个值等于e的元素,并返回其下标
int FindElem(Sqlist L,int e) { int i; for(i=0;i<L.length;++i) if(e==L.data[i]) return i; return 0; //未找到,返回0,作为失败标记 }
(5)顺序表中删除元素
删除顺序表中下标为p(0<=p<=L.length-1)的元素,成功返回1,否则返回0,并将被删除的元素赋值给e
int deleteElem(Sqlist &L,int p,int &e) { int i; if(p<0||p>L.length-1) return 0; //越界,删除失败,返回-1 e = L.data[p]; for(i=p;i<L.length-1;++i) L.data[i]=L.data[i+1]; //从p位置开始,后面的元素前移 --(L.length); //删除成功,表长减一 return 0; //删除成功,返回0 }
(6)顺序表中插入元素
在顺序表L的第p个位置插入新的元素e,如果p的输入不正确,返回0,否则返回1
int insertElem(Sqlist &L,int p,int e) { int i; if(p<0||p>L.length||L.length=maxSize) return 0; //插入失败,返回0 for(i=L.length-1;i>=p;--i) L.data[i+1]=L.data[i]; //元素后移 L.data[p]=x; ++(L.length); //表长加一 return 0; //插入成功,返回0 }
(7)设计一个算法,将顺序表中的元素逆置
分析:使用两个变量i ,j 指示元素表中的第一个和最后一个元素,交换i , j 所指元素,然后 i 向后移,j 向前移,如此循环,指导 i 和 j相遇
void reverse(Sqlist &L) { int i,j; int temp; //辅助变量,用于交换 for(i =0,j=L.length-1;i<j;++i,--j) //i ,j 相遇时,循环结束 { temp = L.data[i]; L.data[i] = L.data[j]; L.data[j] = temp; } }
(8)删除顺序表L中下标 i 到 j 的(包括 i j )的所有元素
void delete(Sqlist &L,int i,int j) { int k,delete; delete = j-i+1; //元素要移动的距离 for(k=j+1;k<L.length;++k) { L.data[k-delete]=L.data[k]; //用第k个元素去覆盖它前面的第delete个元素 } L.length = delete; }