(一)顺序表
(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;
}