【P】数据结构与算法C++版_模拟试题精简版

合集下载

《数据结构C》模拟试题

《数据结构C》模拟试题
图9.2
8.下列算法实现二叉搜索树上的查找,请在空格处填入适当的语句,完成上述功能
public Node<T> Search(Node<T> root, T value)
{
Node<T> p = root;
if (p == null)
{
return null;
}
if (!p.Data.Equals(value))
}
}
Qc.Next=Hc;
}
return Hc;
}
3.解答
public int Judge(LinkList<T> Head)
{
bool flag=false;
int i=2;
LinkList<T> P;
LinkList<T> Q;
Q=Head.Next;
while(P!=null)
{
if(P.Data==i*i-Q.Data)
{
flag=true;
}
else
{
return false;
}
Q=P;
P=P.Next;
++i;
}
return flag;
}
《数据结构C》模拟试题二
班级姓名学号
一、选择题(20分)
1.数据结构是研究数据的( )以及它们之间的相互关系。
(A)理想结构、物理结构(B)理想结构、抽象结构
(C)物理结构、逻辑结构(D)抽象结构、逻辑结构
,判满的条件是。
2.循环链表的主要优点是。
3.给定一个整数集合{3,5,6,9,12},画出其对应的一棵Huffman树。

(完整版),数据结构c语言版试题大全(含答案),推荐文档

(完整版),数据结构c语言版试题大全(含答案),推荐文档

B
16C
18、逻辑结构|顺序存储结构|链式存储结构|以上都对
B
17B
19、每个结点用占一片连续的存储区域|所有结点占用一片连续的存储区域|结点的最后一个数据域是 18B
指针类型|每个结点有多少个后继,就设多少个指针域
A
19A
20、效率与采用何种存储结构有关|是根据存储结构来定义的|有算术运算和关系运算两大类|必须用 20A
31、一个有限序列,可以为空|一个有限序列,不可以为空|一个无限序列,可以为空|一个无限序列, 37A
不可以为空
A
38B
32、必须是连续的|一定是不连续的|部分地址必须是连续的|连续与否均可以
D
39B
33、可随机访问任一结点|插入删除不需要移动元素|不必事先估计存储空间|所需空间与其长度成正 40D
-3-
35、设线性表有 n 个元素,以下操作中,_______在顺序表上实现比在链表上实现效率更高。 输出第 i(1<=i<=n)个元素值|交换第 1 个元素与第 2 个元素的值|顺序输出这 n 个元素的值|输出与给定值 x 相等的元素在线性表中的序号 36、对于一个线性表,既要求能够较快地进行插入和删除,又要求存储结构能够反映数据元素之间的逻辑 关系,则应采用_______存储结构。 顺序|链式|散列|索引 37、设线性表中有 2n 个元素,以下操作中,______在单链表上实现要比在顺序表上实现效率更高。 删除指定的元素|在最后一个元素的后面插入一个新元素|顺序输出前 k 个元素|交换第 i 个元素和第 2n-i-1 个元素的值(i=0,1,…,n-1) 38、需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是______。 单链表|静态链表|线性链表|顺序存储结构 39、如果最常用其所长的操作是取第 i 个结点及其前驱,则采用______结构方式最节省时间。 单链表|双链表|单循环链表|顺序表 40、与单链表相比,双链表的优点之一是______。 插入、删除操作更简单|可以进行随机访问|可以省略表头指针或表尾指针|访问前后相邻结点更灵活 41、数据结构在计算机内存中的表示是指______. 数据的存储结构|数据结构|数据的逻辑结构|数据元素之间的关系 42、下面程序段的时间复杂度为_________. O(m)| O(n)|O(m*n)|O(m+n)

数据结构与算法-模拟试题3

数据结构与算法-模拟试题3

数据结构与算法-模拟试题3一、单项选择题(每个题只有一个答案是正确的,请将正确的答案填写到括号内。

本题共15个小题,每小题3分,共45分)1. 下面的说法正确的是()。

A.数据结构可以分成逻辑结构和线性结构B.数据的逻辑结构是指数据及其逻辑结构在计算机中的表示C.从逻辑结构角度数据结构可以分为集合、线性结构、树结构和图结构四类D.数据的存储结构是从具体问题抽象出来的数学模型2. 线性表采用链式存储时,存储空间()。

A.必须是不连续的B.连续与否均可C.必须是连续的D.和头结点的存储地址相连续3.顺序循环队列容量为20,队头表示第一个元素的位置,队尾表示最后一个元素的下一个位置,当队头为12,队尾为5的时候,队列中共有()个元素。

A.15B.14C.12D.134. 设计一个判别表达式中括号是否配对的算法,采用()数据结构最佳。

A. 顺序表B. 链表C. 队列D. 栈5. 下列有关串的操作中,()不是串的常用操作。

A.连接(concat)B.求子串(substring)C.插入(insert)D.求长度(length)6. 广义表GL=(a, (a))的表头是()。

A. aB. (a)C. ()D. ((a))7.二叉树高度为k,第1层到第k-1层每层都是满的,第k层结点数不满,但该层结点从左到右满放,则该二叉树为()。

A. 斜树B. 有序树C. 满二叉树D. 完全二叉树8.将一棵树转换为二叉树后,该转换后的二叉树的特点是()。

A. 没有右子树B. 没有左子树C. 左右子树都有D. 每层上只有一个结点9. 关于有向图的的说法错误的是()。

A. 有向图中顶点v的入度(indegree)是以顶点v为终点(弧头)的弧的数目B. 有向图中顶点v的出度(outdegree)是以顶点v为始点(弧尾)的弧的数目C. 有向图中各顶点的入度之和等于各顶点的出度之和D. 有向图中各顶点入度之和等于弧数e的2倍10. 在无向图的邻接表存储结构中插入一个顶点和一条边,不需要进行的操作是()。

国家二级C语言(数据结构与算法)机试模拟试卷1(题后含答案及解析)

国家二级C语言(数据结构与算法)机试模拟试卷1(题后含答案及解析)

国家二级C语言(数据结构与算法)机试模拟试卷1(题后含答案及解析)题型有:1. 选择题选择题1.算法具有五个特性,以下选项中不属于算法特性的是A.有穷性B.简洁性C.可行性D.确定性正确答案:B解析:算法的五个特性分别是:有穷性、可行性、确定性、输入和输出。

知识模块:数据结构与算法2.算法的有穷性是指A.算法程序的运行时间是有限的B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用正确答案:A解析:算法的有穷性,是指算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止。

知识模块:数据结构与算法3.算法的时间复杂度是指A.算法的执行时间B.算法所处理的数据最C.算法程序中的语句或指令条数D.算法在执行过程中所需要的基本运算次数正确答案:D解析:算法的时间复杂度,是指执行算法所需要的计算工作量。

算法的工作量可以用算法在执行过程中所需基本运算的执行次数来度量。

知识模块:数据结构与算法4.对存储器按字节进行编址,若某存储器芯片共有10根地址线,则该仔储器芯片的存储容量为A.1kbB.2kbC.4kbD.8kb正确答案:A解析:10根地址线,每根地址线有0和1两种情况,地址范围就是2的10次方=1024=1K。

知识模块:数据结构与算法5.磁盘处于写保护状态时其中的数据A.不能读出,不能删改B.可以读出,不能删改C.不能读出,可以删改D.可以读出,可以删改正确答案:B解析:磁盘处于写保护状态时其中的数据可以读出来,但是不能修改和删除。

知识模块:数据结构与算法6.在Windows环境下,单击当前窗口中的按钮“”,其功能是A.讲当前应用程序转为后台运行B.退Windows后再关机C.终止当前应用程序的运行D.退出Windows后重新启动计算机正确答案:C解析:在Windows中,单击窗口中的按钮“”表示关闭当前运行的程序。

知识模块:数据结构与算法7.下列描述中正确的是A.数据的逻辑结构与存储结构必定是一一对应的B.由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构C.程序设计语言中的数据一般是顺序存储结构,因此,利用数组只能处理线性结构D.以上三种说法都不对正确答案:D解析:数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构。

数据结构c语言版试题大全(含答案)

数据结构c语言版试题大全(含答案)

数据结构c语言版试题大全(含答案)数据结构C语言版试题大全(含答案)第一章:基本概念与算法设计1.1 数据结构的定义与特点数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它包括了数据的存储、组织和管理方式。

数据结构的特点包括以下几个方面:- 数据元素之间存在某种关系,构成逻辑结构- 对数据元素的操作对应于对其逻辑结构的操作- 数据结构有存储结构,包括顺序存储结构和链式存储结构- 算法是对数据结构的操作步骤的描述和实现1.2 算法的基本概念算法是解决特定问题或完成特定任务的一系列操作步骤。

算法的基本概念包括以下几个方面:- 有穷性:算法必须能在有限步骤内完成- 确定性:算法的每一步骤必须有确定的含义和结果- 可行性:算法的每一步骤必须可行,能够通过执行有限次数实现- 输入:算法接受的输入数据是原始问题的实例- 输出:算法产生的输出数据与输入有明确的关系1.3 算法的描述方法算法可以用自然语言、伪代码或流程图来描述。

常用的伪代码描述方法包括结构化语言和算法描述语言,结构化语言包括顺序结构、分支结构和循环结构。

第二章:线性结构2.1 线性表的定义与基本操作线性表是n个数据元素的有限序列,其中相邻元素之间存在唯一的前驱和后继关系。

线性表的基本操作包括插入、删除、查找和修改等。

2.2 数组与广义表数组是指具有相同数据类型的一组数据元素的集合,可以通过下标访问元素。

广义表是线性表的推广,其中元素可以是基本数据类型或另一个广义表。

第三章:树与二叉树3.1 树的定义与基本术语树是n(n≥0)个结点的一个有限集合,其中满足以下条件:- 有且仅有一个特定的称为根的结点- 其余结点可分为m(m≥0)个互不相交的有限集合,每个集合本身又是一棵树3.2 二叉树的定义与性质二叉树是指每个结点最多有两个子结点的树结构。

二叉树的性质包括以下几个方面:- 深度为k的二叉树最多有2^k-1个结点- 一棵二叉树的第i层最多有2^(i-1)个结点- 在二叉树的第i层上至多有2^(n-i+1)-1个结点(n为树的深度)第四章:图4.1 图的基本概念与术语图是由顶点的有穷非空集合和边的有穷集合组成的。

国家二级C语言(数据结构与运算)机试模拟试卷1(题后含答案及解析)

国家二级C语言(数据结构与运算)机试模拟试卷1(题后含答案及解析)

国家二级C语言(数据结构与运算)机试模拟试卷1(题后含答案及解析)题型有:1. 选择题选择题1.对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是A.快速排序B.冒泡排序C.直接插入排序D.堆排序正确答案:D解析:各种排序方法中最坏情况下需要比较的次数分别为:冒泡排序n(n-1)/2、快速排序n(n-1)/2、简单插入排序n(n-1)/2、希尔排序O(n1.5)、简单选择排序n(n-1)/2、堆排序O(nlog2n)。

知识模块:数据结构与运算2.下列关于栈的叙述正确的是A.栈按“先进先出”组织数据B.栈按“先进后出”组织数据C.只能在栈底插入数据D.不能删除数据正确答案:B解析:栈是限定在一端进行插入和删除的线性表,允许进行插入和删除元素的一端称为栈顶,另一端称为栈底。

栈是按照“先进后出”的原则组织数据的。

知识模块:数据结构与运算3.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是A.10B.8C.6D.4正确答案:C解析:根据二叉树的性质,在任意二叉树中,度为0的结点总是比度为2的结点多一个。

知识模块:数据结构与运算4.下列叙述中正确的是A.算法复杂度是指算法控制结构的复杂程度B.算法复杂度是指设计算法的难度C.算法的时间复杂度是指设计算法的工作量D.算法的复杂度包括时间复杂度与空间复杂度正确答案:D解析:算法复杂度,即算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。

一个算法的评价主要从时间复杂度和空间复杂度来考虑。

算法的时间复杂度是指执行算法所需要的计算工作量。

空间复杂度是指算法在计算机内执行时所需存储空间的度量。

知识模块:数据结构与运算5.下列叙述中正确的是A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定正确答案:D解析:循环队列中元素的个数是由队头指针和队尾指针共同决定的,元素的动态变化也是通过队头指针和队尾指针来反映的。

国家二级C语言(数据结构与算法)机试模拟试卷2(题后含答案及解析)

国家二级C语言(数据结构与算法)机试模拟试卷2(题后含答案及解析)

国家二级C语言(数据结构与算法)机试模拟试卷2(题后含答案及解析)题型有:1. 选择题选择题1.算法中,对需要执行的每一步操作,必须给出清楚、严格的规定。

这属于算法的A.正当性B.可行性C.确定性D.有穷性正确答案:C解析:本题考查算法的基本特征。

算法的可行性表示算法中执行的任何步骤都是可以被分解为基本的可执行的操作步:确定性是指算法的每一步骤必须有确切的含义;有穷性是指算法必须能在执行有限个步骤之后终止。

知识模块:数据结构与算法2.下列叙述中正确的是A.算法就是程序B.设计算法时只需要考虑数据结构的设计C.设计算法时只需要考虑结果的可靠性D.以上三种说法都不对正确答案:D解析:所谓算法是指解题方案的准确而完整的描述。

是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,且是明确的,此顺序将在有限的次数下终止。

算法不等于程序,也不等于计算方法。

设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构。

知识模块:数据结构与算法3.下列叙述中正确的是A.算法的效率只与问题的规模有关,而与数据的存储结构无关B.算法的时间复杂度是指执行算法所需要的计算工作量C.数据的逻辑结构与存储结构是一一对应的D.算法的时间复杂度与空间复杂度一定相关正确答案:B解析:算法的时间复杂度是指执行算法所需要的计算工作量。

算法的工作量用算法所执行的基本运算的次数来度量,而算法所执行的基本运算次数是问题规模的函数;算法的空间复杂度一般是指执行这个算法所需要的内存空间。

算法的时间复杂度与空间复杂度并不相关。

数据的逻辑结构就是数据元素之间的逻辑关系,它是从逻辑上描述数据元素之间的关系,是独立于计算机的;数据的存储结构是研究数据元素和数据元素之问的关系如何在计算机中表示,它们并非一一对应。

算法的执行效率不仅与问题的规模有关,还与数据的存储结构有关。

知识模块:数据结构与算法4.在DOS环境F,代表键盘和显示器的设备文件名为A.PRNB.CONC.NULD.LPT正确答案:B解析:本题考查DOS下面的虚拟设备文件,选项A)的PRN表示打印机,选项B)中的CON表示键盘或屏幕,选项C)的NUL表示虚拟空设备,选项D)的LPT表示并口。

《数据结构》模拟试卷C及答案

《数据结构》模拟试卷C及答案
第3趟17 7 18 32 40 60
第4趟71718 32 40 60
第5趟无元素交换,排序结束。
3.请画出与下面的二叉树相对应的森林。
答:
4.设有无向图如下图所示。请画出该图的邻接表,写出一个从顶点A出发的广
度优先搜索序列。
答:
广度优先搜索序列:abcdefg
五、算法设计题(本大题共2小题,共21分)
A.直接插入排序B.快速排序C.直接选择排序D.堆排序
8.高度为k的完全二叉树至少含有( )个结点。B
A.2kB.2k-1C.2k+1D.2k-1
9.n个顶点的强连通图至少有( )条边。A
A. nB. n+1C.n-1D. n(n-1)
10.在最坏情况下,二叉排序树的平均成功查找长度是()的。B
A.O(log2n) B.O(n) C.O(n2) D.O(1)
3.线性表有两种常用的存储结构,即顺序表和链表,这两种存储结构各有什么优缺点?
答:线性表的顺序存储结构简单,不需要使用额外的存储空间来表示元素之间的关系,逻辑顺序与物理顺序一致,可随机存取,有些运算容易实现;但在做插入和删除运算时,要移动大量的元素,表长是固定的,不易扩展。链式存储表示是动态结构,表长可任意扩充,插入和删除不需要移动大量的元素;但不能随机存取,需要增加额外的存储空间来显式地表示元素之间的关系,逻辑顺序与物理顺序可以不一致。
1.设有长度大于1的循环单链表,p为指向其中某个结点的指针,删除该结点的前驱结点的算法如下。请在此算法的空白处填上适当的内容。(10分)
ListNode *delfront(p)
ListNode *p;
{
ListNode *q, *r;
q=p;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

假设二叉树中每个结点所含数据元素均为单字母,以二叉链表为存储结构,试编写算法按如下图所示的树状显示二叉树。

从上图来看,二叉树的第一层显示在第一列,第二层显示在第二列,第三层显示在第三列;每行显示一个结点,从上至下是先显示右子树,再显示根,最后最左子树,也就是以先遍历右子树,最后遍历左子树的中序遍历次序显示各结点。

具体算法实现如下:// 文件路径名:exam1\alg.htemplate <class ElemType>void DisplayHelp(BinTreeNode<ElemType> *r, int level)// 操作结果:按树状形式显示以r为根的二叉树,level为层次数,可设根结点的层次数为1{if(r != NULL){ // 空树不显式,只显式非空树DisplayHelp<ElemType>(r->rightChild, level + 1); // 显示右子树cout << endl; // 显示新行for(int i = 0; i < level - 1; i++)cout << " "; // 确保在第level列显示结点cout << r->data; // 显示结点DisplayHelp<ElemType>(r->leftChild, level + 1); // 显示左子树}}template <class ElemType>void Display(const BinaryTree<ElemType> &bt)// 操作结果:树状形式显示二叉树{DisplayHelp<ElemType>(bt.GetRoot(), 1); // 树状显示以bt.GetRoot()为根的二叉树cout << endl; // 换行}以二叉链表作存储结构,试编写计算二叉树中叶子结点数目的递归算法。

本题只要在遍历二叉树的过程序中对叶子结点进行记数即可。

具体算法实现如下:// 文件路径名:exam2\alg.htemplate <class ElemType>long LeafCountHelp(BinTreeNode<ElemType> *r)// 操作结果:按树状形式显示二叉树,level为层次数,可设根结点的层次数为1{if (r == NULL){ // 空二叉树return 0; // 空树返回0}else if (r->leftChild == NULL && r->rightChild == NULL){ // 只有一个结点的树return 1; // 只有一个结点的树返回1}else{ // 其他情况, 叶子结点数为左右子树的叶子结点数之和return LeafCountHelp(r->leftChild) + LeafCountHelp(r->rightChild);}}template <class ElemType>long LeafCount(const BinaryTree<ElemType> &bt)// 操作结果:计算二叉树中叶子结点数目{return LeafCountHelp(bt.GetRoot()); // 调用辅助函数实现计算二叉树中叶子结点数目}编写一个算法求二叉树的深度。

若二叉树为空,深度为0;若二叉树不空,则二叉树的深度为左右子树深度的最大值加1。

本题最简单算法是递归算法。

具体算法实现如下:template <class ElemType>int DepthHelp(BinTreeNode<ElemType> *r)// 操作结果:求二叉树的深度{if (r == NULL){ // 空二叉树return 0; // 空二叉树的深度为0}else{ // 非空二叉树int lDepth = DepthHelp(r->leftChild); // 左子树的深度int rDepth = DepthHelp(r->rightChild); // 右子树的深度return ((lDepth > rDepth) ? lDepth : rDepth) + 1; // 返回左右子树的深度最大值加1}}template <class ElemType>int Depth(BinaryTree<ElemType> &bt)// 操作结果:求二叉树的深度{return DepthHelp(bt.GetRoot()); // 调用辅助函数求二叉树的深度}试写一递归算法,从大到小输出二叉排序树中所有的关键字值小于key的元素值。

可按先遍历右子树,遍历根结点,再遍历左子树进行中序遍历,这样可实现由大到小遍历一棵二叉排序树。

具体算法实现如下:// 文件路径名:exam4\alg.htemplate <class ElemType, class KeyType>void InOrderHelp(BinTreeNode<ElemType> *r, const KeyType &key)// 操作结果: 从大到小输出以r为根的二叉排序树中所有的关键字值小于key的元素值{if (r != NULL){ // 非空二叉排序树InOrderHelp(r->rightChild, key); // 遍历右子树if(r->data < key) cout << r->data << " "; // 输出根结点InOrderHelp(r->leftChild, key); // 遍历左子树}}template <class ElemType, class KeyType>void InOrder(const BinarySortTree<ElemType, KeyType> &t, const KeyType &key) // 操作结果: 从大到小输出二叉排序树中所有的关键字值不小于key 的元素值 { InOrderHelp(t.GetRoot(), key); // 调用辅助函数实现从大到小输出二叉排序树中所有的关键字值不小于key 的元素值 }编写复制一棵二叉树的非递归算法。

可采用层次遍历的方式进行复制,将已复制的结点进入一个队列中即可。

具体算法实现如下:// 文件路径名:exam5\alg.h template <class ElemType>void CopyBitree(BinaryTree<ElemType> *fromBtPtr, BinaryTree<ElemType> *&toBtPtr) // 操作结果: 复制二叉树fromBt 到toBt 的非递归算法 { if (toBtPtr != NULL) delete toBtPtr; // 释放toBtPtr if (fromBtPtr == NULL || fromBtPtr->Empty()) { // 空二叉树 toBtPtr = NULL; // 空二叉树 } else { // 非空二叉树 LinkQueue<BinTreeNode<ElemType> *> fromQ, toQ; // 队列 BinTreeNode<ElemType> *fromPtr, *toPtr, *fromRoot, *toRoot; fromRoot = fromBtPtr->GetRoot(); // 取出fromBtPtr 的根 toRoot = new BinTreeNode<ElemType>(fromRoot->data); // 复制根结点 fromQ.InQueue(fromRoot); // 入队 toQ.InQueue(toRoot); // 入队 while (!fromQ.Empty()) // fromQ 非空 { fromQ.OutQueue(fromPtr); // 出队 toQ.OutQueue(toPtr); // 出队 if (fromPtr->leftChild != NU LL) // 左子树非空 // 复制fromPtr 左孩子 { toPtr->leftChild = new BinTreeNode<ElemType>(fromPtr->leftChild->data); fromQ.InQueue(fromPtr->leftChild); toQ.InQueue(toPtr->leftChild); // 入队 } if (fromPtr->rightChild != NULL) // 右子树非空 // 复制fromPtr 右孩子 { toPtr->rightChild = new BinTreeNode<ElemType>(fromPtr->rightChild->data); fromQ.InQueue(fromPtr->rightChild); toQ.InQueue(toPtr->rightChild); // 入队 } } toBtPtr = new BinaryTree<ElemType>(toRoot); // 生成toBtPtr } }已知广义表L=(((b,c),d),((a),((b,c),d)),()),试画出它的存储结构。

0120121∧d 011b1∧c 2012011∧a 2∧012011b1∧c 1∧d 2∧0∧1已知两个带头结点的单链表A和B分别表示两个集合,元素值递增有序,设计算法求出A,B的交集C,并同样以递增的形式存储。

解答:由于单链表A和B是递增有序的,可设置两个整型变量分别表示两个单链表的当前元素的位置,依次取出A 与B的元素进行比较,当A的数据元素小于B的值时,将指向A的当前位置都后移;当A的数据元素大于B的值时,将指向B的当前位置都后移,否则将A(或B)的当前元素复制到C中,并同时将A与B的当前位置后移。

具体算法如下:用单链表la表示集合la,用单链表lb表示集合lb,用单链表lc表示集合lc,具体算法如下:// 文件路径名:exam6\alg.htemplate <class ElemType>void Interaction(const LinkList<ElemType> &la, const LinkList<ElemType> &lb,LinkList<ElemType> &lc)// 初始条件: la和lb中数据元素递增有序// 操作结果: lc返回la与lb表示的集合的交集,并使lc中数据元素仍递增有序{ElemType aItem, bItem; // la和lb中当前数据元素int aLength = la.Length(), bLength = lb.Length(); // la和lb的长度int aPosition = 1, bPosition = 1; // la和lb的当前元素序号lc.Clear(); // 清空lcwhile (aPosition <= aLength && bPosition <= bLength ){ // 取出la和lb中数据元素进行归并la.GetElem(aPosition, aItem); // 取出la中数据元素lb.GetElem(bPosition, bItem); // 取出lb中数据元素if (aItem < bItem){ // aItem插入到lcaPosition++; // 指向la下一数据元素}else if (aItem > bItem){ // lb后移bPosition++; // 指向lb下一数据元素}else{ // aItem == bItem,la和lb同时后移lc.Insert(lc.Length() + 1, aItem); // 插入aItem到lcaPosition++; // 指向la下一数据元素bPosition++; // 指向lb下一数据元素}}}试用递归法编写输出从n个数中挑选 k个进行排列所得序列的算法。

相关文档
最新文档