编辑代码

//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;
}