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;
class Combine {
private:
int* A;
int length;
public:
Combine() {}
Combine(int l) {
A = new int[1000];
length = l;
for (int i = 0;i < l;i++)
cin >> A[i];
}
friend Combine Link(Combine& a, Combine& b) {
Combine c;
c.A = new int[1000];
c.length = a.length + b.length;
for (int i = 0;i < a.length;i++)
c.A[i] = a.A[i];
for (int i = a.length,j=0;i < c.length;j++,i++)
c.A[i] = b.A[j];
//Sort(c);
return c;
}
friend void Sort(Combine& c) {
for (int i = 0;i < c.length;i++) {
int temp =c.A[i];
for (int j = i + 1;j < c.length;j++) {
if (c.A[j] < temp) {
temp = c.A[j];
c.A[j] = c.A[i];
c.A[i] = temp;
}
}
}
cout << c.length << " ";
for (int i = 0;i < c.length;i++)
cout << c.A[i]<<" ";
cout << endl;
}
};
int main() {
int m, n;
cin >> m;
//A = new int[1000];
//B = new int[1000];
Combine a(m);
cin >> n;
Combine b(n);
Combine c=Link(a, b);
Sort(c);
}
在主函数里,我犯了一个大的错误:一开始我的写法是
cin>>m>>n;
Combine a(m);
Combine b(n);
结果当然是错的,因为这道题的类的初始化是输入一个数组,当我输入m后,紧接着是数组数据的输入,所以不能够紧接着输入n,这是一个傻瓜错误,我一开始还没注意到。
还有其它的小错误,导致的结果就是没有输出,遇到这种情况,我的经验是第一时间检查各种循环是否合理,尤其的局限值得设定,有时候多一位少一位,结果大相径庭。
最后的总结就是,写代码的时候,脑回路要尽可能靠近机器,做到一令一动,这样才能减少错误。
标签:顺序,int,合并,++,length,Combine,DS,输入,1000 来源: https://blog.csdn.net/weixin_52258402/article/details/120494431