总体实现(没有说是顺序表还是链表):
void union(List& La, List& Lb)
{
La_len = ListLength(La);
Lb_len = ListLength(Lb);
for (i = 1; i < Lb_len; i++)
{
GetElem(Lb, i);
if(!Locate(La,e))
Insert(La, ++La_len, e)
}
}
有序表的合并:
顺序表实现:(王道习题答案)
bool Merge(SeqList A, SeqList B, SeqList C)
{
if (A.length + B.length > C.maxSize)//
return false;
int i = 0, j = 0, k = 0;
while (i < A.length && j < B.length)//
{
if (A.data[i] <= B.data[j])
C.data[k++] = A.data[i++];
else
C.data[k++] = B.data[j++];
}
while (i < A.length)//
C.data[k++] = A.data[i++];
while (i < B.length)
C.data[k++] = B.data[i++];
C.length = k + 1;
return true;
}
链表实现:
void Merge2(LinkList& A, LinkList& B, LinkList& C)
{
pa = A->next;
pb = B->next;
C = A;//用A的头结点作为C的头结点
pc = C;
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;
}
}
if (pa)//插入剩余段
pc->next = pa;
else
pc->next = pb;
delete B;
}