其他分享
首页 > 其他分享> > DS顺序表合并操作

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