算法步骤:
(1)创建一个空表Lc
(2)依次从La或Lb中摘取两表中值较小的结点插入到Lc的表后,直至其中一个表变空为止
(3)继续将La或Lb其中一个表的剩余结点插入在Lc的表后
void MergeList_Sq(SqList La, SqList Lb, SqList& Lc) {//有序表合并--用顺序表实现
ElemType* pa = La.elem;
ElemType* pb = Lb.elem; //指针pa和pb的初值分别指向两个表的第一个元素
Lc.length = La.length + Lb.length; //新表长度为待合并两表的长度之和
Lc.elem = new ElemType[Lc.length]; //为合并后的新表分配一个数组空间
ElemType* pc = Lc.elem; //指针pc指向新表的第一个元素
ElemType* La_last = pa + La.length - 1; //指针pa_Last指向La表的最后一个元素
ElemType* Lb_last = pb + Lb.length - 1; //指针pb_Last指向Lb表的最后一个元素
while (pa <= La_last && pb <= Lb_last) { //两个表都非空
if (*pa <= *pb) //以此摘取两表中值较小的结点
*pc++ = *pa++;
else
*pc++ = *pb++;
}
while (pa <= La_last) //Lb表已到达表尾,将La中剩余元素加入Lc
*pc++ = *pa++;
while (pb <= Lb_last) //Lb表已到达表尾,将La中剩余元素加入Lc
*pc++ = *pb++;
}