数据结构练习题――合并表
描述
已知va和vb分别为非递减有序线性表,将va和vb进行合并为新的线性表vc,并保持vc仍然非递减有序。
本题中,线性表元素为整数。线性表的最大长度为1000。
输入
输入数据有多组,第一行为测试数据的组数t,接下来为2t行,每一组测试数据有两行:
第一行的第一个数为va的元素个数n,后面是n个整数,代表va的所有元素
第二行的第一个数为vb的元素个数m,后面是m个整数,代表vb的所有元素
输出
输出合并后的长度以及vc的所有元素
样例输入
2
2 1 2
2 2 3
3 1 2 3
3 4 5 6
样例输出
4 1 2 2 3
6 1 2 3 4 5 6
提示
你也可以使用链表来实现,有空也练练吧
刚开始进入数据结构,要学的还很多,真的很难 ,坚持
#include <iostream> #include <cstring> using namespace std; int c[2002]; void xbunion(int a[],int n,int b[],int m) { int k=0,s=0,h=0; while(k<n&&h<m) { if(a[k]<b[h]) { c[s]=a[k];s++;k++; } else if(a[k]==b[h]) { c[s]=a[k];c[s+1]=b[h];s+=2;k++;h++; } else { c[s]=b[h];s++;h++; } } if(k==n)//说明a数组中的元素都归并到c数组了 { while(h<m) { c[s]=b[h];s++;h++; } } if(h==m)//b数组中的元素都归并到c数组了 { while(k<n) { c[s]=a[k];k++;s++; } } cout<<s; for(int i=0;i<s;i++) { printf(" %d",c[i]); } cout<<endl; } int main() { int a[1001],b[1001],n,m,t,j,k; memset(c,0,sizeof(c)/sizeof(c[0])); cin>>t; while(t--) { cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } cin>>m; for(int i=0;i<m;i++) { cin>>b[i]; } xbunion(a,n,b,m); } }