算法2.1 合并两个线性表 C++实现

#include
using namespace std;
int const MAX_SIZE = 100;
struct ListNode {                            //定义线性表的结构体
	int val;
};
class MyList {                               //定义线性表的类
private:
	ListNode* L;
	int length;
public:
	MyList();
	~MyList();
	void CreatList(int n);                            //创建线性表
	void MergeList(MyList& L1, MyList& L2, MyList& L3); //合并线性表
	void print();                                       //打印线性表
};
void MyList::print() {
	if (length == 0) {
		cout << "NULL LIST" << endl;
		return;
	}
	else {
		for (int i = 1; i <= length; i++) {
			cout << L[i].val << " ";
		}
		cout << endl;
	}
}
void MyList::CreatList(int n) {
	length = n;
	cout << "输入数组中的值:" << endl;
	for (int i = 1; i <= n; i++) {
		//cout << "输入第" << i << "个值: ";
		cin >> L[i].val;
	}
}
MyList::MyList() {
	L = new ListNode[MAX_SIZE];
	length = 0;
}
MyList::~MyList(){
	length = 0;
	delete[] L;
}
void MyList::MergeList(MyList& L1, MyList& L2, MyList& L3) {    //将两个不递减的线性表按照不递减的顺序放到新的线性表中
	int i = 1, j = 1, k = 0;;                                  
	int la = L1.length, lb = L2.length;
	L3.length = L1.length + L2.length;
	while (i <= la && j <= lb) {                       //分别遍历两个线性表
		if (L1.L[i].val < L2.L[j].val) {               //若L1的val 小于L2的val,L3的val中放入L1的val
			L3.L[++k].val = L1.L[i].val;
			i++;
		}
		else {                                        //若L2的val 小于L1的val,L3的val中放入L2的val
			L3.L[++k].val = L2.L[j].val;
			j++;
		}
	}
	while (i <= la) {
		L3.L[++k].val = L1.L[i].val;
		i++;
	}
	while (j <= lb) {
		L3.L[++k].val = L2.L[j].val;
		j++;
	}
}
void implement() {
	MyList L1, L2, L3;
	int n1, n2;
	cout << "输入L1 的大小" << endl;
	cin >> n1;
	cout << "输入L2 的大小" << endl;
	cin >> n2;
	L1.CreatList(n1);
	L2.CreatList(n2);
	L3.MergeList(L1, L2, L3);
	L3.print();
}
int main() {
	implement();
}

测试结果:

算法2.1 合并两个线性表 C++实现_第1张图片

ps:核心思路就是:同时开始遍历两个线性表,并比较两个线性表的val值,小的先放到新的线性表中,大的继续比较。

你可能感兴趣的:(c++,数据结构,算法)