实现两个有序(从小到大)顺序表合并成为一个顺序表,合并后的结果放在第一个顺序表中(假设这两个有序顺

2024-12-16 13:43:22
推荐回答(1个)
回答1:

你好!!!!
代码如下;
/******用顺序表实现表的链接及删除重复的数字*******/

#include
#include
#include

typedef int Elemtype;

typedef struct//定义结构体
{
Elemtype *elem; //定义指针数组
int length; //数组的最大长度
int listsize; //数组的实际大小
}SqList;

void union_list(SqList pa,SqList pb, SqList &pc)//调用函数连接两个线性表
{
int i,j;
pc.elem =(int *)malloc(sizeof(int)*(pa.listsize+pb.listsize));//开辟空间
pc.elem =pa.elem ;
pc.listsize =pa.listsize ;

for( i=0;i {
for( j =0 ;j {
if(pb.elem [i]==pc.elem [j])
break;

}
if(j>=pc.listsize )
{
pc.elem[pc.listsize]=pb.elem[i];
pc.listsize ++;
//cout< }

}

for(i=0;i for(j=i+1;j if(pc.elem[i]>pc.elem[j])
{
int m;
m=pc.elem[i];
pc.elem[i]=pc.elem [j];
pc.elem [j]=m;

}

}

void main ()
{
SqList la,lb,lc;

cout<<"输入第一个数组的最大长度"< cin>>la.length;

cout<<"输入第一个数组的实际长度"< cin>>la.listsize;

la.elem =(int *)malloc(sizeof(int)*la.listsize);//开辟空间

cout<<"输入第一个数组"< for(int i=0;i cin>>la.elem[i];

cout<<"输入二个数组的最大长度"< cin>>lb.length;

cout<<"输入第二个数组的实际长度"< cin>>lb.listsize;

lb.elem =(int *)malloc(sizeof(int)*lb.listsize);//开辟空间

cout<<"输入第二个数组"< for( i=0;i cin>>lb.elem[i];

union_list( la, lb, lc);//调用函数连接两个线性表

cout<<"连接后的数组长度为"< cout< for(i=0;i cout< cout</*
输入第一个数组的最大长度
10
输入第一个数组的实际长度
5
输入第一个数组
4 6 8 10 15
输入二个数组的最大长度
10
输入第二个数组的实际长度
5
输入第二个数组
1 3 4 7 9
连接后的数组长度为
9
链接后的数组为
1 3 4 6 7 8 9 10 15
*/

}