顺序表的归并举例
说明
- 已知:顺序线性表La和Lb的元素按值非递减排序
- 要求:归并La和Lb得到新的顺序线性表Lc,Lc的元素也按值非递减排序(不改变表La和表Lb)
以下内容保存在algo2-1.cpp
#include "c1.h"
typedef int ElemType;
#include "c2-1.h"
#include "bo2-1.h"
#include "fun2-2.h"
void MergeList(SqList La, SqList Lb, SqList &Lc)
{
ElemType * pa, *pa_last, *pb, *pb_last, *pc;
pa = La.elem;
pb = Lb.elem;
Lc.listsize = Lc.length = Lc.length + Lb.length;
pc = Lc.elem = (ElemType *)malloc(Lc.listsize * sizeof(ElemType));
if(!Lc.elem)
{
exit(OVERFLOW);
}
pa_last = La.elem + La.length - 1;
pb_last = Lb.elem + Lb.length - 1;
while(pa <= pa_last && pb <= pb_last)
{
if(* pa <= * pb)
{
* pc++ = * pa++;
}
else
{
* pc++ = * pb++;
}
}
while(pa <= pa_last)
{
* pc++ = * pa++;
}
while(pb <= pb_last)
{
* pc++ = * pb++;
}
return;
}
void main()
{
SqList La, Lb, Lc;
int j;
InitList(La);
for(j = 1; j <= 5; j++)
{
ListInsert(La, j, j);
}
printf("La = ");
ListTraverse(La, print1);
InitList(Lb);
for (j = 1; j <= 5; j++)
{
ListInsert(Lb, j, 2 * j);
}
printf("Lb = ");
ListTraverse(Lb, print1);
MergeList(La, Lb, Lc);
printf("Lc = ");
ListTraverse(Lc, print1);
return;
}