【数据结构】问题 C: DS顺序表–合并操作
题目描述
建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为1000)
已知两个递增序列,把两个序列的数据合并到顺序表中,并使得顺序表的数据递增有序
输入
第1行先输入n表示有n个数据,接着输入n个数据,表示第1个序列,要求数据递增互不等
第2行先输入m表示有m个数据,接着输入m个数据,表示第2个序列,要求数据递增互不等
输出
顺序表内容包括顺序表的实际长度和数据,数据之间用空格隔开
第1行输出创建后的顺序表内容
---------------
样例输入
3 11 33 55
5 22 44 66 88 99
样例输出
8 11 22 33 44 55 66 88 99
代码
#include <iostream>
using namespace std;
#define error -1
#define ok 1
class SeqList
{
private:
int *list;
int maxsize;
int size;
public:
SeqList(){
maxsize = 1000;
size = 0;
list = new int[maxsize];
}
SeqList(int n,int a[]){
maxsize = 1000;
size = n;
list = new int[maxsize];
for(int i = 0;i<n;i++)
list[i]=a[i];
}
~SeqList(){
delete []list;
}
//输入n,以及n个数据
void InitList()
{
int n,e;
cin>>n;
if(n>=0 && n<=maxsize)
{
for(int i=0;i<n;i++)
{
cin>>e;
size++;
list[i]=e;
}
}
}
//合并
SeqList& mergeList(SeqList &l2)
{
int a[size+l2.size];
int j=0,k=0;
int s=0;
while(j<size && k<l2.size)
{
if(list[j]<=l2.list[k]) a[s++]=list[j++];
else a[s++]=l2.list[k++];
}
while(j<size)
a[s++] = list[j++];
while(k<l2.size)
a[s++] = l2.list[k++];
SeqList L3(s,a);
L3.printList();
return L3;
}
//打印
void printList()
{
cout<<size<<" ";
for(int i=0;i<size;i++)
cout<<list[i]<<" ";
cout<<endl;
}
};
int main()
{
int pos,elem;
SeqList L1,L2;
//插入原始数据
L1.InitList();
L2.InitList();
L1.mergeList(L2) ;
return 0;
}