【算法与数据结构实战】线性表操作-合并两个线性表中的元素

简介: 输入:顺序表A,顺序表B输出:合并了AB元素的顺序表C,其中C中元素按照非递减排列分析:顺序表C是一个空表,首先取出顺序表A和B中的元素,并将这两个元素比较,如果A中的元素m1大于B中的元素n1,则将B中的元素n1插入C中,继续取出B中下一个元素n2与A中元素m1比较。

输入:顺序表A,顺序表B

输出:合并了AB元素的顺序表C,其中C中元素按照非递减排列

分析:顺序表C是一个空表,首先取出顺序表A和B中的元素,并将这两个元素比较,如果A中的元素m1大于B中的元素n1,则将B中的元素n1插入C中,继续取出B中下一个元素n2与A中元素m1比较。如果A中的元素m1小于等于B中的元素n1,则将A中的元素m1插入C中,继续取出A中下一个元素m2与B中元素n1比较。以此类推比较下去,直到一个表中元素比较完毕,将另一个表中剩余元素插入C中。

以下代码在VS2017环境下编译通过。

//数据结构与算法基础题1:合并两个线性表中的元素
//输入一个顺序表A,输入一个顺序表B,要求合并AB到C中,C是非递减排列

#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#pragma warning(disable:4996)

using namespace std;

int main()
{
	int num_of_elements_in_A = 0;
	int num_of_elements_in_B = 0;
	vector<int> list_A;
	vector<int> list_B;
	vector<int> list_C;//结果存储在的序列

	cout << "请输入列表A的元素个数:";
	cin >> num_of_elements_in_A;
	if (num_of_elements_in_A <= 0) {
		cout << "元素个数不可以小于0!"<<endl;
		return 1;
	}
	cout << "A列表元素个数为:" << num_of_elements_in_A << endl;
	for (int i = 0; i < num_of_elements_in_A; i++) {
		int temp = 0;
		cout << "请输入列表A的第" << i + 1 << "个元素:";
		cin >> temp;
		list_A.push_back(temp);
	}
	cout << "请输入列表B的元素个数:";
	cin >> num_of_elements_in_B;
	if (num_of_elements_in_B <= 0) {
		cout << "元素个数不可以小于0!" << endl;
		return 1;
	}
	cout << "B列表元素个数为:" << num_of_elements_in_B << endl;
	for (int i = 0; i < num_of_elements_in_B; i++) {
		int temp = 0;
		cout << "请输入列表B的第" << i + 1 << "个元素:";
		cin >> temp;
		list_B.push_back(temp);
	}

	sort(list_A.begin(), list_A.end());//把列表A中的元素进行非递减排列
	sort(list_B.begin(), list_B.end());//把列表B中的元素进行非递减排列
	vector<int>::iterator it_A= list_A.begin(), it_B= list_B.begin();
	//进行比较,依次按照大小插入AB元素到C,任意列表指针移动到尾部就退出
	while (it_A != list_A.end() && it_B != list_B.end()) {
		if (*it_A <= *it_B) {
			list_C.push_back(*it_A);
			it_A++;
		}
		else if (*it_B < *it_A) {
			list_C.push_back(*it_B);
			it_B++;
		}
	}
	//对还没插入C列表的元素进行处理
	if (it_A == list_A.end()) {
		for (; it_B != list_B.end(); it_B++)
		{
			list_C.push_back(*it_B);
		}
	}
	if (it_B == list_B.end()) {
		for (; it_A != list_A.end(); it_A++)
		{
			list_C.push_back(*it_A);
		}
	}
	//对最终列表C的元素进行输出,检验结果
	for (vector<int>::iterator it_C=list_C.begin(); it_C != list_C.end(); it_C++)
	{
		cout << *it_C << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}

 

目录
打赏
0
0
0
0
821
分享
相关文章
|
1月前
|
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
48 9
 算法系列之数据结构-二叉树
|
29天前
|
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
42 3
 算法系列之数据结构-Huffman树
|
1月前
|
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
69 22
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
102 29
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
131 25
基于免疫算法的最优物流仓储点选址方案MATLAB仿真
本程序基于免疫算法实现物流仓储点选址优化,并通过MATLAB 2022A仿真展示结果。核心代码包括收敛曲线绘制、最优派送路线规划及可视化。算法模拟生物免疫系统,通过多样性生成、亲和力评价、选择、克隆、变异和抑制机制,高效搜索最优解。解决了物流仓储点选址这一复杂多目标优化问题,显著提升物流效率与服务质量。附完整无水印运行结果图示。
基于免疫算法的最优物流仓储点选址方案MATLAB仿真
基于GA遗传算法的斜拉桥静载试验车辆最优布载matlab仿真
本程序基于遗传算法(GA)实现斜拉桥静载试验车辆最优布载的MATLAB仿真,旨在自动化确定车辆位置以满足加载效率ηq(0.95≤ηq≤1.05)的要求,目标是使ηq尽量接近1,同时减少加载车辆数量和布载耗时。程序通过迭代优化计算车辆位置、方向、类型及占用车道等参数,并展示适应度值收敛过程。测试版本为MATLAB2022A,包含核心代码与运行结果展示。优化模型综合考虑车辆总重量、间距及桥梁允许载荷密度等约束条件,确保布载方案科学合理。
基于GA遗传优化TCN时间卷积神经网络时间序列预测算法matlab仿真
本内容介绍了一种基于遗传算法优化的时间卷积神经网络(TCN)用于时间序列预测的方法。算法运行于 Matlab2022a,完整程序无水印,附带核心代码、中文注释及操作视频。TCN通过因果卷积层与残差连接学习时间序列复杂特征,但其性能依赖超参数设置。遗传算法通过对种群迭代优化,确定最佳超参数组合,提升预测精度。此方法适用于金融、气象等领域,实现更准确可靠的未来趋势预测。
基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比
本项目展示了一种基于FPGA的音频水印算法,采用LSB(最低有效位)技术实现版权保护与数据追踪功能。使用Vivado2019.2和Matlab2022a开发,完整代码含中文注释及操作视频。算法通过修改音频采样点的最低有效位嵌入水印,人耳难以察觉变化。然而,面对滤波或压缩等攻击时,水印提取可能受影响。该项目运行效果无水印干扰,适合实时应用场景,核心逻辑简单高效,时间复杂度低。
基于GA遗传算法的拱桥静载试验车辆最优布载matlab仿真
本程序基于遗传算法(GA)实现拱桥静载试验车辆最优布载的MATLAB仿真,旨在自动化确定车辆位置以满足加载效率要求(0.95≤ηq≤1.05),目标是使ηq尽量接近1,同时减少车辆数量和布载耗时。程序在MATLAB 2022A版本下运行,展示了工况1至工况3的测试结果。通过优化模型,综合考虑车辆重量、位置、类型及车道占用等因素,确保桥梁关键部位承受最大荷载,从而有效评估桥梁性能。核心代码实现了迭代优化过程,并输出最优布载方案及相关参数。