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

简介: 输入:顺序表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;
}

 

目录
相关文章
|
3月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
197 6
|
4月前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
119 2
|
4月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
86 3
|
17天前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
80 29
|
17天前
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
75 25
|
17天前
|
存储 人工智能 算法
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
60 23
|
1月前
|
存储 算法 测试技术
【C++数据结构——线性表】求集合的并、交和差运算(头歌实践教学平台习题)【合集】
本任务要求编写程序求两个集合的并集、交集和差集。主要内容包括: 1. **单链表表示集合**:使用单链表存储集合元素,确保元素唯一且无序。 2. **求并集**:遍历两个集合,将所有不同元素加入新链表。 3. **求交集**:遍历集合A,检查元素是否在集合B中存在,若存在则加入结果链表。 4. **求差集**:遍历集合A,检查元素是否不在集合B中,若满足条件则加入结果链表。 通过C++代码实现上述操作,并提供测试用例验证结果。测试输入为两个集合的元素,输出为有序集合A、B,以及它们的并集、交集和差集。 示例测试输入: ``` a c e f a b d e h i ``` 预期输出:
43 7
|
1月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
42 5
|
1月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】
本文档介绍了线性表的基本运算任务,涵盖顺序表和链表的初始化、销毁、判定是否为空、求长度、输出、查找元素、插入和删除元素等内容。通过C++代码示例详细展示了每一步骤的具体实现方法,并提供了测试说明和通关代码。 主要内容包括: - **任务描述**:实现顺序表的基本运算。 - **相关知识**:介绍线性表的基本概念及操作,如初始化、销毁、判定是否为空表等。 - **具体操作**:详述顺序表和链表的初始化、求长度、输出、查找、插入和删除元素的方法,并附有代码示例。 - **测试说明**:提供测试输入和预期输出,确保代码正确性。 - **通关代码**:给出完整的C++代码实现,帮助完成任务。 文档
42 5
|
1月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
52 2

热门文章

最新文章