版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/82821321
问题:
2.有顺序表A和B,其元素均按从小到大的升序排列,编写一个算法,将它们合并成一个顺序表C,要求C的元素也按从小到大的升序排列。
头文件与该头文件一样:【数据结构】顺序表的实现(C语言)
#include "stdio.h"
#include "sequlist.h"
int main ()
{
int length,i,j,input_number,a;
sequence_list slt1,slt2,slt3;
while(1)
{
init(&slt1);
init(&slt2);
init(&slt3);
printf("请输入想要创建的第一个顺序表的长度:");
scanf("%d",&length);
printf("输入%d个数字:\n",length);
for (i=1;i<=length;i++)
{
scanf("%d",&input_number);
append(&slt1,input_number);
}
printf("请输入想要创建的第二个顺序表的长度:");
scanf("%d",&length);
printf("请输入%d个数字:\n",length);
for (i=1;i<=length;i++)
{
scanf("%d",&input_number);
append(&slt2,input_number);
}
printf("创建的第一个顺序表是:");display(&slt1);puts("\n");
printf("创建的第二个顺序表是:");display(&slt2);puts("\n");
sort_slt(&slt1,slt1.size_);
sort_slt(&slt2,slt2.size_);
printf("从小到大排序以后:\n");
printf("第一个顺序表是:");display(&slt1);puts("\n");
printf("第二个顺序表是:");display(&slt2);puts("\n");
if (isempty(&slt2))
{
printf("合成后的顺序表:");
display(&slt1);puts("\n");
}
else if (isempty(&slt1))
{
printf("合成后的顺序表:");
display(&slt2);puts("\n");
}
else
{
if (slt1.a[0] <= slt2.a[0])
{
insert_(&slt2,slt1.a[0],0);
delete_(&slt1,0);
}
j=1;
while (slt1.size_ && j<slt2.size_)
{
if((slt1.a[0] <= slt2.a[j]) && (slt1.a[0] >= slt2.a[j-1]) )
{
insert_(&slt2,slt1.a[0],j);
delete_(&slt1,0);
}
else
{
j++;
}
}
printf("合成后的顺序表:");
display(&slt2);puts("\n");
}
}
return 0;
}