《数据结构》-算法2.7

独自空忆成欢 提交于 2020-02-05 03:45:29
void MergeList_Sq(SqList La, SqList Lb, SqList *Lc) 
{   // 已知顺序线性表La和Lb的元素按值非递减排列。
    // 归并La和Lb得到新的顺序线性表Lc,Lc的元素也按值非递减排列
    ElemType *pa, *pa_last, *pb, *pb_last, *pc;
    pa = La.elem;
    pb = Lb.elem;
    Lc->listsize = Lc->length = La.length + Lb.length; // 不用InitList()创建空表Lc
    pc = Lc->elem = (ElemType *)malloc(Lc->listsize * sizeof(ElemType));
    if (!Lc->elem) // 存储分配失败
        exit(-1);
    pa_last = La.elem + La.length - 1;
    pb_last = Lb.elem + Lb.length - 1;
    while (pa <= pa_last && pb <= pb_last) // 表La和表Lb均非空
    {                                      // 归并
        if (*pa <= *pb)
            *pc++ = *pa++; // 将pa所指单元的值赋给pc所指单元后,pa和pc分别+1(指向下一个单元)
        else
            *pc++ = *pb++; // 将pb所指单元的值赋给pc所指单元后,pa和pc分别+1(指向下一个单元)
    }                      // 以下两个while循环只会有一个被执行
    while (pa <= pa_last)  // 表La非空且表Lb空
        *pc++ = *pa++;     // 插入La的剩余元素
    while (pb <= pb_last)  // 表Lb非空且表La空
        *pc++ = *pb++;     // 插入Lb的剩余元素
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!