941: 有序顺序表的合并操作的实现
题目描述
已知两非递减的顺序线性表,要求合并成一个新的非递减顺序线性表。(测试数据为整型)
输入
输入包含四行,第一行为自然数n,表示第一个非递减顺序线性表的长度; 第二行为n个自然数构成的非递减顺序线性表;
第三行为自然数m,表示第二个非递减顺序线性表的长度; 第四行为m个自然数构成的非递减顺序线性表。
输出
输出:用一行输出合并后的非递减顺序线性表,各数之间用一个空格隔开。
样例输入
2
1 3
3
2 3 6
样例输出
1 2 3 3 6
#include<iostream>
#include<malloc.h>
using namespace std;
# define maxsize 50
typedef struct link
{
int data[maxsize];
int length;
}Linklist;
void creatlink(Linklist *&p1,Linklist *&p2,Linklist *&p3,int a[],int b[],int len1,int len2)
{
p1=(Linklist *)malloc(sizeof(Linklist));
for(int i=0;i<len1;i++)
p1->data[i]=a[i];
p1->length=len1;
p2=(Linklist *)malloc(sizeof(Linklist));
for(int i=0;i<len2;i++)
p2->data[i]=b[i];
p2->length=len2;
p3=(Linklist *)malloc(sizeof(Linklist));
p3->length=len1+len2;
}//创建顺序表并储存数据元素
void add(Linklist *&p1,Linklist *&p2,Linklist *&p3)
{
for(int i=0;i<p1->length;i++)
{
p3->data[i]=p1->data[i];
}
int num=p1->length;
for(int i=0;i<p2->length;i++)
{
p3->data[num]=p2->data[i];
num++;
}
}//合并顺序表
void Sort(Linklist *&p3)
{
for(int i=0;i<p3->length;i++)
{
for(int j=i+1;j<p3->length;j++)
{
if(p3->data[i]>p3->data[j])
{
int sum;
sum=p3->data[i];
p3->data[i]=p3->data[j];
p3->data[j]=sum;
}
}
}
}//顺序表非递减排序
void Cout(Linklist *&p3)
{
for(int i=0;i<p3->length;i++)
{
cout << p3->data[i];
if(i!=p3->length-1) cout << ' ';
}
cout << endl;
}//输出顺序表
int main()
{
int n,m,a[50],b[50];
cin >> n;
for(int i=0;i<n;i++)
cin >> a[i];
cin >> m;
for(int i=0;i<m;i++)
cin >> b[i];
Linklist *p1,*p2,*p3;
creatlink(p1,p2,p3,a,b,n,m);
add(p1,p2,p3);
Sort(p3);
Cout(p3);
return 0;
}