已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列且不重复。
C实现:
#include<stdio.h>
struct LinerList
{
int *list;
int size;
int MAXSIZE;
};
int main()
{
int list1[15]={2,5,7,8,11};
int list2[15]={2,6,8,9,11,15,20};
int list3[30];
struct LinerList L1={list1,5,15};
struct LinerList L2={list2,7,15};
struct LinerList L3={list3,0,30};
int i,j,k;
for(i=j=k=0;k<L3.MAXSIZE&&i<L1.size&&j<L2.size;k++)
{
if(L1.list[i]>L2.list[j])
{
L3.list[k]=L2.list[j++];
}
else if(L1.list[i]==L2.list[j])
{
L3.list[k]=L1.list[i++];
j++;
}
else
{
L3.list[k]=L1.list[i++];
}
}
while(k<L3.MAXSIZE&&i<L1.size)
{
L3.list[k++]=L1.list[i++];
}
while(k<L3.MAXSIZE&&j<L2.size)
{
L3.list[k++]=L2.list[j++];
}
L3.size=k;
printf("合并之后的数组长度是【%d】\n各元素如下:\n",L3.size);
for(k=0;k<L3.size;k++)
{
printf("%4d",L3.list[k]);
}
printf("\n");
return 0;
}
结果: