数据结构考试题8复习过程
数据结构复习题及答案

中南大学现代远程教育课程考试(考试)复习题及参考答案数据结构(使用教材:余腊生编著,人民邮电出版社出版,《数据结构—基于C++模板类的实现》一、判断题1.数组是一种复杂的数据结构,数组元素之间的关系既不是线性的也不是树形的。
[ ] 2.链式存储在插人和删除时需要保持物理存储空间的顺序分配,不需要保持数据元素之间的逻辑顺序。
[ ]3.在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。
[ ] 4.通常递归的算法简单、易懂、容易编写,而且执行的效率也高。
[ ] 5.一个广义表的表尾总是一个广义表。
[ ] 6.当从一个小根堆(最小堆)中删除一个元素时,需要把堆尾元素填补到堆顶位置,然后再按条件把它逐层向下调整,直到调整到合适位置为止。
[ ] 7.对于一棵具有n个结点,其高度为h的二叉树,进行任一种次序遍历的时间复杂度为O(h)。
[ ] 8.存储图的邻接矩阵中,邻接矩阵的大小不但与图的顶点个数有关,而且与图的边数也有关。
[ ] 9.直接选择排序是一种稳定的排序方法。
[ ] 10.30、闭散列法通常比开散列法时间效率更高。
[ ] 11.有n个结点的不同的二叉树有n!棵。
[ ] 12.直接选择排序是一种不稳定的排序方法。
[ ] 13.在2048个互不相同的关键码中选择最小的5个关键码,用堆排序比用锦标赛排序更快。
[ ] 14.当3阶B_树中有255个关键码时,其最大高度(包括失败结点层)不超过8。
[ ] 15.一棵3阶B_树是平衡的3路搜索树,反之,一棵平衡的3路搜索树是3阶非B_树。
[ ] 16.在用散列表存储关键码集合时,可以用双散列法寻找下一个空桶。
在设计再散列函数时,要求计算出的值与表的大小m互质。
[ ] 17.在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。
[ ] 18.折半搜索只适用于有序表,包括有序的顺序表和有序的链表。
数据结构期末考试复习题及参考答案

第1章绪论1. 填空(1)()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
【解答】数据元素(2)()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。
【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。
(3)从逻辑关系上讲,数据结构主要分为()、()、()和()。
【解答】集合,线性结构,树结构,图结构(4)数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。
【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系(5)算法具有五个特性,分别是()、()、()、()、()。
【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性(6)在一般情况下,一个算法的时间复杂度是()的函数。
【解答】问题规模(7)设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。
【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。
2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。
A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。
⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是()。
A 树B 图C 线性表D 集合【解答】B【分析】将丈夫、妻子和子女分别作为数据元素,根据题意画出逻辑结构图。
⑶算法指的是()。
数据结构与算法复习题库含答案

数据结构与算法复习题库含答案1. 问题描述:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
答案:可以使用哈希表来解决此问题。
首先初始化一个空的哈希表,然后遍历数组中的每个元素。
对于每个元素,首先计算目标值与当前元素的差值,然后在哈希表中查找该差值。
如果找到了该差值,则说明存在两个数的和等于目标值,返回这两个数的下标;否则,将当前元素插入到哈希表中。
时间复杂度为O(n),其中n为数组的长度。
2. 问题描述:给定一个字符串,找出其中不含重复字符的最长子串的长度。
答案:可以使用滑动窗口来解决此问题。
维护一个窗口,其中包含没有重复字符的子串。
遍历字符串中的每个字符,如果该字符不在窗口中,将其加入窗口;如果该字符在窗口中,移动窗口的左边界直到窗口中不包含重复字符。
记录窗口的最大长度。
时间复杂度为O(n),其中n为字符串的长度。
3. 问题描述:给定一个字符串和一个单词列表,找出字符串中可以由单词列表中的单词组成的所有子串的起始位置。
答案:可以使用滑动窗口和哈希表来解决此问题。
首先统计单词列表中每个单词的出现次数。
然后遍历字符串中的每个位置作为子串的起始位置,维护一个滑动窗口。
在窗口中依次取出长度和单词列表中单词总长度相等的子串,在哈希表中统计子串中每个单词出现的次数。
如果窗口中的子串与单词列表中的单词出现次数一致,则记录该子串的起始位置。
时间复杂度为O(n*m),其中n为字符串的长度,m为单词列表中的单词个数。
4. 问题描述:给定一个无序的整数数组,找出其中缺失的第一个正整数。
答案:可以使用原地哈希表来解决此问题。
遍历数组中的每个元素,将每个正整数放到数组中对应的位置上。
遍历数组中的每个元素,如果该位置上的数不等于数组索引加一,则该索引加一即为缺失的第一个正整数。
时间复杂度为O(n),其中n为数组的长度。
5. 问题描述:给定一个字符串s,找到s中最长的回文子串。
答案:可以使用动态规划来解决此问题。
数据结构各章复习题

计算机学院 甘士成
Copyright © 1992 - 2012 Gane Cheng . All Rights Reserved .
1 / 54
5. 下面说法错误的是(
)
(1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模 n 下,复杂度 O(n)的算法在时间上总是优于复杂度 O(2 )的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3)
(p^.rlink)^.llink:=p^.llink; (p^.llink)^.rlink:=p; p^.rlink:=(p^.rlink)^.rlink p^.llink:=(p^.rlink)^.rlink;
三、简答题
1.线性表有两种存储结构:一是顺序表,二是链表。试问: (1)如果有 n 个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。在 此情况下,应选用哪种存储结构? 为什么?
计算机学院 甘士成
(B)部分地址必须是连续的
Copyright © 1992 - 2012 Gane Cheng . All Rights Reserved . 3 / 54
(C)一定是不连续的 ( B )7. 线性表L在
(D)连续或不连续都可以 情况下适用于使用链式结构实现。 (B)需不断对L进行删除插入 (D)L中结点结构复杂
(
A )3. 在 n 个结点的顺序表中,算法的时间复杂度是 O(1)的操作是: (A) 访问第 i 个结点(1≤i≤n)和求第 i 个结点的直接前驱(2≤i≤n) (B) 在第 i 个结点后插入一个新结点(1≤i≤n) (C) 删除第 i 个结点(1≤i≤n) (D) 将 n 个结点从小到大排序
数据结构强化习题课汇总复习过程

数据结构强化习题课汇总复习过程数据结构强化习题课汇总第⼀章绪论考点1 数据结构基础知识1.数据的逻辑结构是指(),数据的存储结构是指()分析:数据结构包括三⽅⾯的内容:数据的逻辑结构、存储结构和数据的运算。
其中,逻辑结构是指各数据元素之间的逻辑关系,存储结构是指逻辑结构⽤计算机语⾔的实现。
解答:数据元素之间的逻辑关系;数据的逻辑结构⽤计算机语⾔的实现。
2.在数据结构中,从逻辑上可以把数据结构分为:(A)A 线性和⾮线性结构B 紧凑和⾮紧凑结构C 动态和静态结构D 内部和外部结构分析:数据结构中,逻辑上可以把数据结构分成线性结构和⾮线性结构。
线性结构的顺序存储结构是⼀种随机存取的存储结构,线性表的链式存储结构是⼀种顺序存储结构。
线性表若采⽤链式存储表⽰时,所有结点之间的存储单元地址可连续可不连续。
逻辑结构与数据元素本⾝的形式、内容、相对位置、所含结点个数⽆关。
关键考点点评:线性结构的特征,有且仅有⼀个开始结点和终端结点,所有结点最多只有⼀个直接前驱和后继。
栈和队列。
⾮线性结构的结点有多个前驱或后继,树和图。
3.数据结构在物理上可以分为()存储结构和链式存储结构。
分析:物理存储解答:顺序4.下列术语中,()与数据的存储结构⽆关A 循环队列B 堆栈C 散列表D 单链表解答: A5.()不是算法所必须具备的特性A 有穷性B 确定性C ⾼效性D 可⾏性分析:算法的五个重要特征:有穷性、确定性、可⾏性、输⼊和输出。
解答:C考点2 时间复杂度计算1.设n是描述问题规模的⾮负整数,下⾯程序段的时间复杂度是()2.第⼆章线性表考点1 线性表的基本概念1.线性表是n个()的有限序列。
A 字符 B数据元素 C 由数据项 D 信息项解析:解答 B2.线性表是⼀个()。
A 有限序列,可以为空B 有限序列,不能为空C ⽆限序列,可以为空D ⽆限序列,不能为空解答 A关键考点点评:对于⾮空线性表1.有且仅有⼀个开始结点,没有直接前驱,有且仅有⼀个直接后继;2.有且仅有⼀个终结结点,没有直接后继,有且仅有⼀个直接前驱;3.其余的内部结点都有且仅有⼀个直接前驱和后继3.单链表不能随机存取元素原因是:要得到元素的存储地址,必须()解答:从起始结点开始扫描以得到其地址注:顺序表可以,但是链表不⾏考点2 线性表的顺序存储结构1.下述()是顺序存储结构的优点A 插⼊运算⽅便B 可⽅便地⽤于各种逻辑结构的存储表⽰C 存储密度⼤D 删除运算⽅便解答: C2.线性表的()存储结构是随机存储结构。
数据结构复习题及答案5篇

数据结构复习题及答案5篇第一篇:数据结构复习题及答案、数据结构复习题及答案中南大学现代远程教育课程考试(专科)复习题及参考答案数据结构一、判断题:1.数组是一种复杂的数据结构,数组元素之间的关系既不是线性的也不是树形的。
()2.链式存储在插人和删除时需要保持物理存储空间的顺序分配,不需要保持数据元素之间的逻辑顺序。
()3.在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。
()4.折半搜索只适用于有序表,包括有序的顺序表和有序的链表。
()5.如果两个串含有相同的字符,则这两个串相等。
()6.数组可以看成线性结构的一种推广,因此可以对它进行插入、删除等运算。
()7.在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。
()8.通常递归的算法简单、易懂、容易编写,而且执行的效率也高。
()9.一个广义表的表尾总是一个广义表。
()10.当从一个小根堆(最小堆)中删除一个元素时,需要把堆尾元素填补到堆顶位置,然后再按条件把它逐层向下调整,直到调整到合适位置为止。
()11.对于一棵具有n个结点,其高度为h的二叉树,进行任一种次序遍历的时间复杂度为O(h)。
()12.存储图的邻接矩阵中,邻接矩阵的大小不但与图的顶点个数有关,而且与图的边数也有关。
()13.直接选择排序是一种稳定的排序方法。
()14.闭散列法通常比开散列法时间效率更高。
()15.有n个结点的不同的二叉树有n!棵。
()16.直接选择排序是一种不稳定的排序方法。
()17.在2048个互不相同的关键码中选择最小的5个关键码,用堆排序比用锦标赛排序更快。
()18.当3阶B_树中有255个关键码时,其最大高度(包括失败结点层)不超过8。
()19.一棵3阶B_树是平衡的3路搜索树,反之,一棵平衡的3路搜索树是3阶非B_树。
()20.在用散列表存储关键码集合时,可以用双散列法寻找下一个空桶。
《数据结构》复习题

《数据结构》复习题一.选择题:1.数据结构是研究数据的( ) 以及它们之间的相互关系A.理想结构,物理结构B.理想结构,抽象结构C.物理结构,逻辑结构D.抽象结构,逻辑结构2. 组成数据的基本单位是()A.数据项B.数据类型C. 数据元素D. 数据变量3. 如果某数据结构的数据元素的集合为S={A,B,C,D,E,F,G},元素之间的关系为R={<A,D>,<A,G>,<D,B>,<D,C>,<G,E>,<G,F>},则该数据结构是一种()A.线性结构B. 树结构C. 图结构D. 链表结构4. 线性表的链接实现有利于( ) 运算A.插入B.读表元C.查找D.定位5. 设一数列的输入顺序为1,2,3,4,5,6通过栈操作不可能排成的输出序列为()A. 3,2,5,6,4,1B. 1,5,4,6,2,3C. 2,4,3,5,1,6D. 4,5,3,6,2,16. 设字符串S1=‘ABCDEFG’,S2=‘PQRST’则运算S=Concat(Sub(S1,2,Length(S2)),Sub(S1,Length(S2),2))后结果为()A.‘BCQR’B.‘BCDEF’C.‘BCDEFG’D.‘BCDEFEF’7. 设单链表中指针P指向结点A,若要删除A之后的结点(若存在),则修改指针的操作为()A. p→next= p→next→nextB. p= p→nextC. p= p→next→nextD. p→next = p8. 线性表采用链式存储时,其地址()A. 必须是连续的B.部分地址必须是连续的C. 一定是不连续的D.连续与否均可以9. 在内部排序时,排序不稳定的有()A.插入排序B. 冒泡排序C. 快速排序D.归并排序10. 设有1000个元素,用折半法查找时,最小比较次数为()A.0B. 1C.10D. 50011. 将一个元素进入队列的时间复杂度是()n)A. O (1)B. O (n)C. O (n2)D. O (log212. 在一个具有n个结点的单链表中查找其值等x的结点,在查找成功的情况下,需要比较()个元素结点A. n/2B. nC. (n+1)/2D. (n-1)/213. 从一个长度为n的顺序表中删除第i个元素(1≤i≤n),需向前移动()个元素A. n-iB. n-i+1C. n-i-1D. i14. 总共3层的完全二叉树,其结点数至少有()A.3B. 4C.7D.815. 队列操作的原则是()A. 先进先出B.后进先出C. 只能进行插入D. 只能进行删除16. 若线性表最常用的操作是存取第i个元素及其前驱元素的值,则采用()存储方式最节省时间A.单链表B. 双向链表C. 音循环链表D. 顺序表17. 栈和队列都是()A. 顺序存储的线性结构B. 限制存取点的线性结构C. 链接存储的线性结构D. 限制存取点的非线性结构18. 与线性表的链接存储相符的特性是()A.插入和删除操作灵活B. 需要连续存储空间C. 便于随机访问D. 存储密度大19.若进队序列为1,2,3,则出队序列是()A.3,2,1B. 1,3,2C. 1,2,3D. 3,2,120. 在单向循环链表中,若头指针为h,那么p所指结点为尾结点的条件是()A. p= NULLB. p→next= NULLC. p=hD. p→next= h3. 在双向循环链表中,在指针P所指的结点之后插入指针f所指的结点,其操作为。
《数据结构》期末考试复习题及参考答案

数据结构复习题(课程代码 252259)一、填空题(本大题共40小题)1.队列中是按照______先进先出______的原则进行数据元素的增删。
2.___栈__又称为LIFO表。
3.在顺序存储的完全二叉树中,若编号为i的结点有左孩子结点,则其右孩子结点的编号为___2i+1___。
4.存储地址与关键字之间存在某种映射关系的存储结构为_______散列存储结构_______。
5.在串S=“structure”中,以r为首字符的子串有_9_个。
6.设有整型二维数组M[4][3],每个元素(整数)占2个存储单元,元素按行的顺序存储,数组的起始地址为200,元素M[1][1]的地址是___208____。
7.在一个具有n个顶点的无向完全图中,包含有___ n(n-1)/2_____条边,在一个具有n个顶点的有向完全图中,包含有__ n(n-1)______条边。
8.假定一个线性表为(12,23,74,55,63,40),若按Key % 4条件进行划分,使得同一余数的元素成为一个子表,则得到的四个子表分别为_____(12,40)()(74)(23,55,63)____。
9.向一棵B_树插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度____增加1______。
10.在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为__ O(log2n)______,整个堆排序过程的时间复杂度为__ O(nlog2n)______。
11.在快速排序、堆排序、归并排序中,____归并_____排序是稳定的。
12.一棵深度为5的满二叉树中的结点数为_______31_______个。
13.在含n个顶点和e条边的无向图的邻接矩阵中,非零元素的个数为__2e __。
14.从一棵二叉排序树中查找一个元素时,若元素的值大于根结点的值,则继续向____右子树____查找。
15._____拓朴排序______可以判断出一个有向图中是否有环。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构考试题8要求:所有的题目的解答均写在答题纸上,需写清楚题目的序号。
每张答题纸都要写上姓名和学号。
一、单项选择题(选择最准确的一项,共15小题,每小题2分,共计30分)1. 数据结构是指。
A. 一种数据类型B. 数据的存储结构C. 一组性质相同的数据元素的集合D. 相互之间存在一种或多种特定关系的数据元素的集合2. 以下算法的时间复杂度为。
void fun(int n){ int i=1,s=0;while (i<=n){ s+=i+100; i++; }}A. O(n)B. O(n)C. O(nlog2n)D. O(log2n)3. 在一个长度为n的有序顺序表中删除其中第一个元素值为x的元素时,在查找元素x时采用二分查找方法,此时删除算法的时间复杂度为。
A. O(n)B. O(nlog2n)C. O(n2)D. O(n)4. 若一个栈采用数组s[0..n-1]存放其元素,初始时栈顶指针为n,则以下元素x进栈的正确操作是。
A.top++;s[top]=x;B.s[top]=x;top++;C.top--;s[top]=x; B.s[top]=x;top--;5. 设环形队列中数组的下标为0~N-1,其队头、队尾指针分别为front和rear(front 指向队列中队头元素的前一个位置,rear指向队尾元素的位置),则其元素个数为。
A. rear-frontB. rear-front-1C. (rear-front)%N+1D. (rear-front+N)%N6. 若用一个大小为6的数组来实现环形队列,队头指针front指向队列中队头元素的前一个位置,队尾指针rear指向队尾元素的位置。
若当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为。
A. 1和5B. 2和4C. 4和2D. 5和1仅供学习与交流,如有侵权请联系网站删除谢谢27. 一棵高度为h(h≥1)的完全二叉树至少有个结点。
A. 2h-1B. 2hC. 2h+1D. 2h-1+18. 设一棵哈夫曼树中有999个结点,该哈夫曼树用于对个字符进行编码。
A. 999B. 499C. 500D. 5019. 一个含有n个顶点的无向连通图采用邻接矩阵存储,则该矩阵一定是。
A. 对称矩阵B. 非对称矩阵C. 稀疏矩阵D. 稠密矩阵10. 设无向连通图有n个顶点e条边,若满足,则图中一定有回路。
A. e≥nB. e<n-1C. e=n-1D. 2e≥n11. 如果从无向图的任一顶点出发进行一次广度优先遍历即可访问所有顶点,则该图一定是。
A.完全图B.连通图C.有回路D.一棵树12. 设有100个元素的有序表,用折半查找时,不成功查找时最大的比较次数是。
A. 25B. 50C. 10D. 713. 从100个元素确定的顺序表中查找其中某个元素(关键字为正整数),如果最多只进行5次元素之间的比较,则采用的查找方法只可能是。
A.折半查找B.顺序查找C.哈希查找D.二叉排序树查找14. 有一个含有n(n>1000)个元素数据序列,某人采用了一种排序方法对其按关键字递增排序,该排序方法需要关键字比较,其平均时间复杂度接近最好的情况,空间复杂度为O(1),该排序方法可能是。
A.快速排序B.堆排序C.二路归并排序D.都不适合15. 对一个线性序列进行排序,该序列采用单链表存储,最好采用排序方法。
A.直接插入排序B.希尔排序仅供学习与交流,如有侵权请联系网站删除谢谢3C.快速排序D.都不适合二、问答题(共3小题,每小题10分,共计30分)1. 如果对含有n(n>1)个元素的线性表的运算只有4种:删除第一个元素;删除最后一个元素;在第一个元素前面插入新元素;在最后一个元素的后面插入新元素,则最好使用以下哪种存储结构,并简要说明理由。
(1)只有尾结点指针没有头结点指针的循环单链表(2)只有尾结点指针没有头结点指针的非循环双链表(3)只有头结点指针没有尾结点指针的循环双链表(4)既有头结点指针也有尾结点指针的循环单链表2. 对于一个带权连通无向图G,可以采用Prim算法构造出从某个顶点v出发的最小生成树,问该最小生成树是否一定包含从顶点v到其他所有顶点的最短路径。
如果回答是,请予以证明;如果回答不是,请给出反例。
3. 有一棵二叉排序树按先序遍历得到的序列为:(12,5,2,8,6,10,16,15,18,20)。
回答以下问题:(1)画出该二叉排序树。
(2)给出该二叉排序树的中序遍历序列。
(3)求在等概率下的查找成功和不成功情况下的平均查找长度。
三、算法设计题(共3小题,共计40分)1.(15分)假设二叉树b采用二叉链存储结构,设计一个算法void findparent(BTNode *b,ElemType x,BTNode *&p)求指定值为x的结点的双亲结点p。
提示,根结点的双亲为NULL,若在二叉树b中未找到值为x的结点,p亦为NULL。
2. (10分)假设一个有向图G采用邻接表存储。
设计一个算法判断顶点i和顶点j(i ≠j)之间是否相互连通,假设这两个顶点均存在。
3.(15分)有一个含有n个整数的无序数据序列,所有的数据元素均不相同,采用整数数组R[0..n-1]存储,请完成以下任务:(1)设计一个尽可能高效的算法,输出该序列中第k(1≤k≤n)小的元素,算法中给出适当的注释信息。
提示:利用快速排序的思路。
(2)分析你所设计的求解算法的平均时间复杂度,并给出求解过程。
仅供学习与交流,如有侵权请联系网站删除谢谢4“数据结构”考试试题(A)参考答案要求:所有的题目的解答均写在答题纸上,需写清楚题目的序号。
每张答题纸都要写上姓名和学号。
一、单项选择题(共15小题,每小题2分,共计30分)1.D2.B3.A4. C5. D6. B7. A8. C9. A 10. A11. B 12. D 13.C 14.B 15.A二、问答题(共3小题,每小题10分,共计30分)1. 答:本题答案为(3),因为实现上述4种运算的时间复杂度均为O(1)。
2. 答:不是。
如图1所示的图G从顶点0出发的最小生成树如图2所示,而从顶点0。
到顶点的2的最短路径为0→23. 答:(1)先序遍历得到的序列为:(12,5,2,8,6,10,16,15,18,20),中序序列是一个有序序列,所以为:(2,5,6,8,10,12,15,16,18,20),由先序序列和中序序列可以构造出对应的二叉树,如图3所示。
4分(2)中序遍历序列为:2,5,6,8,10,12,15,16,18,20。
4分(3)ASL成功=(1×1+2×2+4×3+3×4)/10=29/10。
1分ASL不成功=(5×3+6×4/11=39/11。
1分图3三、算法设计题(共3小题,共计40分)1.(15分)解:算法如下:void findparent(BTNode *b,ElemType x,BTNode *&p){ if (b!=NULL)仅供学习与交流,如有侵权请联系网站删除谢谢5{ if (b->data==x) p=NULL;else if (b->lchild!=NULL && b->lchild->data==x)p=b;else if (b->rchild!=NULL && b->rchild->data==x)p=b;else{ findparent(b->lchild,x,p);if (p==NULL)findparent(b->rchild,x,p);}}else p=NULL;}2. (10分)解:算法如下:int visited[MAXV];void DFS(ALGraph *G,int v) //深度优先遍历算法{ ArcNode *p;visited[v]=1; //置已访问标记p=G->adjlist[v].firstarc; //p指向顶点v的第一个邻接点while (p!=NULL){ if (visited[p->adjvex]==0) //若p->adjvex顶点未访问,递归访问它DFS(G,p->adjvex);p=p->nextarc; //p指向顶点v的下一个邻接点}}bool DFSTrave(ALGraph *G,int i,int j){ int k;bool flag1=false,flag2=false;for (k=0;k<G->n;k++)visited[k]=0;DFS(G,i); //从顶点i开始进行深度优先遍历if (visited[j]==1)flag1=true;for (k=0;k<G->n;k++)visited[k]=0;DFS(G,j); //从顶点j开始进行深度优先遍历if (visited[i]==1)flag2=true;if (flag1 && flage2)return true;elsereturn false;}3.(15分)(1)采用快速排序的算法如下:(12分)int QuickSelect(int R[],int s,int t,int k) //在R[s..t]序列中找第k小的元素仅供学习与交流,如有侵权请联系网站删除谢谢6{ int i=s,j=t;int tmp;if (s<t) //区段内至少存在2个元素的情况{ tmp=R[s]; //用区段的第1个记录作为基准while (i!=j) //从区段两端交替向中间扫描,直至i=j为止{ while (j>i && R[j]>=tmp)j--; //从右向左扫描,找第1个小于tmp的R[j]R[i]=R[j]; //将R[j]前移到R[i]的位置while (i<j && R[i]<=tmp)i++; //从左向右扫描,找第1个大于tmp的R[i]R[j]=R[i]; //将R[i]后移到R[j]的位置}R[i]=tmp;if (k-1==i) return R[i];else if (k-1<i) return QuickSelect(R,s,i-1,k); //在左区段中递归查找else return QuickSelect(R,i+1,t,k); //在右区段中递归查找}else if (s==t && s==k-1) //区段内只有一个元素且为R[k-1]return R[k-1];}void Mink(int R[],int n,int k) //输出整数数组R[0..n-1]中第k小的元素{ if (k>=1 && k<=n)printf("%d\n", QuickSelect( R,0,n-1,k));}(2)对于求R中第k小元素的算法Mink(R,n,k),设其算法平均执行时间为T(n),有以下递推式:(3分)T(1)=1T(n)=T(n/2)+O(n)则:T(n)= T(n/2)+O(n)= T(n/22)+O(n)+O(n/2)=…=T(n/2m)+O(n)+O(n/2)+…+O(n/2m) //m=log2n=O(1)+O(n)+O(n)=O(n)所以,该算法的平均时间复杂度为O(n)。