链式有序表的合并,时间复杂度:O(LinkList(La)+LinkList(Lb)) 空间复杂度:O(1)
void MergeList_L(LinkList& La, LinkList& Lb, LinkList& Lc)
{
pa = La->next;
pb = Lb->next;
Lc = La;;
pc = Lc;
while (pa && pb)
{
if (pa->data < pb->data)
{
pc -> next = pa;
pc = pa;
pa = pa->next;
}
else {
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa ? pa : pb;
delete Lb;
}
顺序有序表的合并
void MergeList_Sq(SqList La, Sqlist Lb, Sqlist Lc)
{
Lc.length = La.length + Lb.length;
Lc.elem = new.ElemType(Lc.length);
pc = Lc.elem; //均指向第一个元素
pa = La.elem;
pb = Lb.elem;
pa_last = La.elem + Lb.length - 1;//指针pa_last指向La的最后一个元素
pb_last = Lb.elem + Lb.length - 1;//指针pb_last指向Lb的最后一个元素
while ((pa < pa_last) && (pb < pb_last))
{
if (*pa < *pb) *pc++ = *pa++;
else *pc++ = *pb++;
}
while (pa <= pa_last) *pc++ = *pa++; //达到Lb表尾,将La剩余元素插入到Lc之后
while (pb <= pb_last) *pc++ = *pb++;//达到La表尾,将Lb剩余元素插入到Lc之后
}