zoukankan      html  css  js  c++  java
  • 【算法与数据结构实战】线性表操作-合并两个线性表中的元素

    输入:顺序表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;
    }
    
  • 相关阅读:
    通过身份证号获取性别
    网线的制作方法
    duilib中的V和H布局中滚动条问题
    duilib中控件拖拽功能的实现方法(附源码)
    仿酷狗音乐播放器已开源!
    关于仿酷狗音乐播放器开源:寻求一套音乐播放器素材,让仿酷狗开源
    Richedit使用大全
    Redrain个人维护并使用的DuiLib和UiLib库源码下载地址
    vc编译器 msvcr.dll、msvcp.dll的含义和相关错误的处理
    duilib List控件,横向滚动时列表项不移动或者移动错位的bug的修复
  • 原文地址:https://www.cnblogs.com/sbhyc/p/8974872.html
Copyright © 2011-2022 走看看