算法步骤:
(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++;
}
博客介绍了一种算法步骤,先创建空表Lc,接着依次从La或Lb中摘取值较小的结点插入Lc表后,直到其中一个表为空,最后将剩余表的结点继续插入Lc表后,涉及数据结构中的链表。

8613

被折叠的 条评论
为什么被折叠?



