目录:
1.顺序有序表的合并
重复式合并
不重复式合并
2.链式有序表的合并
重复式合并
不重复式合并
3.链式有序表的反序合并
4.两个递增链表的交集
5.两个递增链表的差集
6.6.稀疏多项式的合并
1.顺序有序表的合并
1.1重复式合并
已知有两个有序集合A和B按照递增有序排列,现在有一个集合
C
=A
UB
,C也要按照递增有序排列,举例:A={3,5,8,11},B={2,6,8,9,11,15,20},那么C={2,3,5,6,8,8,9,11,11,15,20}
void MergeList(SqList La,SqList Lb,SqList &Lc)
{
Lc.length=La.length+Lb.length;
Lc.elem=new ElemType[Lc.length];
ElemType *pc=Lc.elem;//pc指向集合C的第一个元素
ElemType *pa=La.elem;//pa指向集合A的第一个元素
ElemType *pb=Lb.elem;//pb指向集合B的第一个元素
ElemType *pa_last=La.elem+La.length-1;//指向A集合的尾元素
ElemType *pb_last=Lb.elem+Lb.length-1;//指向B集合的尾元素
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++;
}
1.2不重复式合并
已知有两个有序集合A和B按照递增有序排列,现在有一个集合
C
=A
UB
,C也要按照递增有序排列,举例:A={3,5,8,11},B={2,6,8,9,11,15,20},那么C={2,3,5,6,8,9,11,15,20}
void MergeList(SqList La,SqList Lb,SqList &Lc)
{
Lc.length=La.length+Lb.length;
Lc.elem=new ElemType[Lc.length];
ElemType *pc=Lc.elem;//pc指向集合C的第一个元素
ElemType *pa=La.elem;//pa指向集合A的第一个元素
ElemType *pb=Lb.elem;//pb指向集合B的第一个元素
ElemType *pa_last=La.elem+La.length-1;//指向A集合的尾元素
ElemType *pb_last=Lb.elem+Lb.length-1;//指向B集合的尾元素
while((pa<=pa_last)&&(pb<=pb_last))
{
if(*pa<*pb)//比较两个元素大小,小的在前大的在后
*pc++=*pa++;//赋值的同时指针向后移动
else if(*pa>*pb)
{
*pc++=*pb++;
}
else
{
*pc++=*pa++;//把两者之一插入即可
pb++;//两个表的指针都要向后移动
Lc.length--;//对于长度需要减1
}
}
while(pa<=pa_last)//谁先结束谁再次循环
*pc++=*pa++;
while(pb<=pb_last