平台:VC++ 2005 测试通过!
.vcproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件。
它包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
StdAfx.h, StdAfx.cpp
这些文件用于生成名为 twod.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。
这些都是使用应用程序向导生成的 VC++ 文件故不列出
我只列出程序主要部分!
// MergeList_Vector.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
void MergeList_L( const vector<int>& La, const vector<int>& Lb, vector<int>& Lc);
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> La, Lb, Lc;
cout <<"****************MergeList*******************"<<endl;
cout <<"请输入La线性表的元素(元素间用空格隔开, -1为序列结束符): ";
int input = -1;
while ( (cin >> input) && ( input != -1 ))
La.push_back(input);
cout <<"请输入Lb线性表的元素(元素间用空格隔开, -1为序列结束符): ";
input = -1;
while ( (cin >> input) && ( input != -1 ))
Lb.push_back(input);
//对La,Lb的元素进行排序,得到两个非递减的线性表
vector<int>::iterator pos;
sort(La.begin(), La.end());
cout <<"La排序后的内容: ";
for ( int i = 0; i < La.size(); i++)
cout << La[i] <<" ";
cout << endl;
sort(Lb.begin(), Lb.end());
cout <<"Lb排序后的内容: ";
for ( int i = 0; i < Lb.size(); i++)
cout << Lb[i] <<" ";
cout << endl;
Lc.resize(Lc.size() + (La.size()+Lb.size()));
MergeList_Sq(La, Lb, Lc);
cout <<"Lc的内容: ";
for ( int i = 0; i < Lc.size(); i++)
cout << Lc[i] <<" ";
cout << endl;
return 0;
}
//接受两个非递减的线性表,并将它们合并为非递减的Lc
void MergeList_Sq( const vector<int>& La, const vector<int>& Lb, vector<int>& Lc)
{
vector<int>::const_iterator pa = La.begin();
vector<int>::const_iterator pb = Lb.begin();
vector<int>::const_iterator pa_last = La.end();
vector<int>::const_iterator pb_last = Lb.end();
vector<int>::iterator pc = Lc.begin();
//注意while循环中是pa < pa_last而不是pa <= pa_last
//这是因为pa_last是指向向量中最末一个元素的下一个位置
while ( (pa < pa_last) && (pb < pb_last) ){
if( *pa <= *pb ) *pc++ = *pa++;
else *pc++ = *pb++;
}
while ( pa < pa_last ) *pc++ = *pa++;
while ( pb < pb_last ) *pc++ = *pb++;
}
分享到:
相关推荐
本文主要介绍数据结构中线性表的实现和归并,通过编写程序,建立两个非递减存储的顺序线性表,并将其归并为一个非递减顺序的线性表。 线性表的定义和实现 线性表是一种基本的数据结构,指的是元素类型相同、各元素...
线性表的合并通常涉及到两个或更多线性表的组合,目标是形成一个新的线性表,其中包含所有原始线性表的元素。在C++中,我们可以使用数组、链表或者动态数组(如std::vector)来表示线性表。这里我们将主要讨论基于...
### 两个递减线性表的合并 #### 题目背景 在计算机科学与技术领域,链表是一种常见的数据结构,在很多实际问题中都有着广泛的应用。本题目旨在通过两个递减有序的单链表的合并操作来加深对链表基本操作的理解与...
在这个程序中,假设我们有两个已排序的单链表,我们可以通过比较它们的头节点来确定合并后的顺序。较小的头节点元素将被放在新链表的前面,然后继续比较下一个节点,直到所有元素都被处理。这个过程可以递归地进行,...
接下来,我们讨论如何合并两个非递减的线性表。这个问题可以看作是有序集合的合并,目标是创建一个新的链表,保持原有的非递减顺序。以下是一种可能的算法步骤: 1. 初始化新链表head,用于存放合并后的结果。 2. ...
数据结构算法——线性表去重 线性表是一种基本的数据结构,它是一种由零个或多个节点组成的有序集合。每个节点都包含一个数据元素和一个指向下一个节点的指针。线性表的节点结构通常包括两个部分:数据域和指针域。...
- **归并操作**:使用`Status merger(SqList *la, SqList *lb, SqList *lc)`函数将两个升序顺序表`la`和`lb`归并到一个新的升序顺序表`lc`中。 #### 程序测试 - **测试实例1**:输入两个有序线性表`-45 -18 -5 14 ...
两个不同长度的线性表的合并,在合并过程中,两个线性表中共有的元素会自动删掉,合并后的线性表没有排序,如需排序,请看我之前发的线性表之顺序表实验
线性表的合并是将两个已排序的线性表合成为一个新的有序线性表的过程。 在这个C语言实现中,程序的目标是合并两个已排序的线性表`a`和`b`,并输出结果。为了达到这个目的,程序首先定义了三个数组:`a`、`b`和`ab`...
这个程序的功能是将两个有序线性表合并为一个有序线性表,要求另辟空间。
线性表的合并操作通常是指将两个或多个已排序的线性表合并成一个有序的线性表。这个过程是排序算法中的一种常见操作,例如归并排序。归并排序的核心就是将大问题分解为小问题,再通过合并小问题的解得到大问题的解。...
头歌C++数据结构与算法 - 线性表
本主题将深入探讨如何使用Visual C++ 6.0(简称VC6)进行对话框编程,实现线性表的顺序存储操作,包括元素的追加、插入和删除。以下是对这些知识点的详细说明: 线性表是一种基本的数据结构,它由相同类型的元素...
具体来说,实验要求学生通过键盘输入数据来建立两个有序线性表,并最终将这两个有序线性表合并成一个新的有序线性表。 #### 实验内容与要求详解 1. **线性表的构建**: - 实验首先要求从键盘输入数据,构建两个...
无序线性表的合并则相对简单,只需遍历两个表,将元素逐个添加到新表中即可。 C语言是实现这种算法的理想选择,因为它的语法简洁,性能高效。在C语言中,线性表可以表示为动态数组或者链表。如果是动态数组,可以...
在给定的例子中,为了求两个线性表的并集A∪B,首先遍历线性表B,如果元素不在线性表A中,则将其插入到A的末尾。这个过程需要使用到`ListLength`,`GetElem`,`LocateElem`和`ListInsert`等操作。 线性表的操作时间...
4. **MergeList(La, Lb, &Lc)**:将非递减线性表 La 和 Lb 合并为非递减有序的 Lc。 5. **UnionList(List *La, List *Lb)**:将所有在 Lb 中但不在 La 中的元素插入到 La 的末尾。 6. **PrintList(L)**:打印线性表 ...
本项目聚焦于使用C++语言的模板机制来实现基于链表结构的线性表,这为处理不同类型的元素提供了灵活性。 C++的模板是一种泛型编程技术,它允许我们编写通用的代码,这些代码可以处理多种数据类型。在实现线性表时,...
在算法设计中,我们需要首先比较两个线性表的节点数据大小,然后将数据按顺序合并为一个有序线性表。在输入/输出设计中,我们可以使用 scanf 函数来输入数据,并使用 printf 函数来输出合并后的有序线性表。 主要...
基本的顺序表操作,例子里是纯集合,非纯集合也可以用,稍微改动一下就好。