//2.1.1 顺序表的定义
typedef struct
{
ElemType data[MaxSize]; //存放顺序表中的元素
int length; //存放顺序表的长度
}SqList; //声明顺序表的类型
//2.1.2 初始化顺序表算法
void InitList(SqList &L)
{
L.length = 0;
}
//2.1.3 求顺序表中指定位置元素值的算法
Int GetElem(SqList L,int i,ElemType &e)
{
if(i < 1 || i > L.length) //参数 i 错误时返回 0
return 0;
e = L.data[i - 1]; //线性表中 ai 对应顺序表中的元素为 L.data[i - 1]
return 1;
}
//2.1.4 按元素值查找算法
int LocateElem(SqList L,ElemType e)
{
int i = 0;
while(i < L.Length && L.data[i] != e)
i++;
if(i >= L.length) //未找到时返回 0
return 0;
else //找到后返回其逻辑序号 i + 1
return i+1;
}
//2.1.5 插入数据元素算法
int ListInsert(SqList &L,ElemType e,int i)
{
int j;
if(i < 1 || i > L.length + 1) //参数 i 错误时返回 0
return 0;
i--; //将逻辑位序转化为 elem 下标
for(j = L.length;j > i;j--) //将 data[i] 及后面元素后移一个位置
L.data[j] = L.data[j - 1];
L.data[i] = e;
L.length++; //顺序表长度增 1
return 1; //成功插入返回 1
}
//2.1.6 删除数据元素算法
int ListDelete(SqList &L,int i,ElemType &e)
{
int j;
if(i < 1 || i>L.length) //参数 i 错误时返回 0
return 0;
i--; //将顺序表位序转化为 data 下标
e = L.data[i];
for(j = i;j < L.length - 1;j++) //将 data[i] 之后的元素前移一个位置
L.data[j] = L.data[j + 1];
L.length--; //顺序表长度减 1
return 1; //成功删除返回 1
}
//2.1.7 整体创建顺序表
void CreateList(SqList &L,ElemType a[],int n)
{
int i,k = 0; //k 累计顺序表 L 中的元素个数
for(i = 0;i < n;i++)
{
L.data[k] = a[i]; //向 L 中添加一个元素
k++; //L 中元素个数增 1
}
L.length = k; //设置 L 的长度
}
//2.1.8 有序顺序表的归并算法
void Merge(SqList L1,SqList L2,SqList &L3)
{
int i = 0,j = 0,k = 0; //i 遍历 L1,j 遍历 L2
while(i < L1.length && j < L2.length)
{
if(L1.data[i] < L2.data[j])
{
L3.data[k] = L1.data[i];
i++;
k++;
}
else //(L1.data[i] >= L2.data[j])
{
L3.data[k] = L2.data[j];
j++;
k++;
}
}
while(i < L1.length) //若 L1 未遍历完,将余下元素归并到 L3 中
{
L3.data[k] = L1.data[i];
i++;
k++;
}
while(j < L2.length) //若 L2 未遍历完,将余下元素归并到 L3 中
{
L3.data[k] = L2.data[j];
j++;
k++;
}
L3.length = k;
}