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的剩余元素
}
来源:CSDN
作者:tyustli
链接:https://blog.csdn.net/tyustli/article/details/104175416