说明: 此试卷为21级数据结构考前模拟题,老师并未给出标准答案,故以下所有答案均为博主给出,并只供参考,不保证其正确性!!!
一. 单选题
-
(单选题)
快速排序方法在( )情况下最不利于发挥其长处。
A.排序的数据量太大
B.排序的数据中含有多个相同值
C.排序的数据个数为奇数
D.排序的数据已基本有序
答案:D -
(单选题)
在下列排序方法中,若待排序的数据已经有序,花费时间反而最多的是
A.快速排序
B.希尔排序
C.冒泡排序
D.堆排序
答案:A -
(单选题)
图的深度优先遍历类似于二叉树的
A.先序遍历
B.中序遍历
C.后序遍历
D.层次遍历
答案:A -
(单选题)
若串S=“software”,其子串的数目是( )。
A.8
B.37
C.36
D.9
答案:B -
(单选题)
顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。
A.100
B.105
C.108
D.110
答案:C -
(单选题)
在数据结构中,从逻辑上可以把数据结构分成( )。
A.动态结构和静态结构
B.紧凑结构和非紧凑结构
C.线性结构和非线性结构
D.内部结构和外部结构
答案:C -
(单选题)
通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着( )。
A.数据在同一范围内取值
B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致
C.每个数据元素都一样
D.数据元素所包含的数据项的个数要相等
答案:B -
(单选题)
线性表L在什么情况下适用于使用链式结构实现?
A.需不断对L进行删除插入
B.需经常修改L中的结点值
C.L中含有大量的结点
D.L中结点结构复杂
答案:A -
(单选题)
树最适合于用来表示( )。
A.有序数据元素
B.无序数据元素
C.元素之间无联系的数据
D.元素之间具有分支层次关系的数据
答案:D -
(单选题)
对一棵满二叉树,m个树叶,n个结点,深度为h,则( )。
A.n=h+m
B.h+m=2n
C.m=h-1
D.n=2^h-1
答案:D
二. 填空题
-
(填空题)
假设顺序表中有 10 个数据元素。其中第 1 个元素的地址(即数组的起始地址)是 100,每个元素占用 2 字节内存空间,则第 5 个元素的地址是 108 -
(填空题)
已知一棵完全二叉树的第5层(设根为第1层)有8个叶结点,则该完全二叉树的结点个数最少是( 23 )。 -
(填空题)
如果一棵二叉树有20个叶结点,则它的度为2的结点数量为( 19 ) 个。 (填写半角阿拉伯数字如1234567890,不要添加空格等字符)
注:二叉树中叶节点数为度为2的节点数加一 -
(填空题)
如果一棵二叉树有20个度为2的结点,则它的叶结点数量为( 21 )个。 (填写半角阿拉伯数字如1234567890,不要添加空格等字符)
注:二叉树中叶节点数为度为2的节点数加一 -
(填空题)
已知一棵完全二叉树的第5层(设根为第1层)有8个叶结点,则该完全二叉树的结点个数最多是( 47 )。 -
(填空题)
若以{4,5,6,7,8}作为叶子结点的权值构造哈夫曼树,则其带权路径长度是( 69 )。 -
(填空题)
若一个二叉树的叶子结点是某子树的中序遍历序列中的最后一个结点,则它必是该子树的( 先序 )遍历序列中的最后一个结点。 -
(填空题)
拓扑排序算法是通过重复选择具有( 0 )个前驱顶点的过程来完成的。 -
(填空题)
对于双向链表,在两个结点之间插入一个新结点需修改的指针共( 4 )个。 -
(填空题)
设S=“A;/document/Mary.doc”,则strlen(s)= ( 20 )
三. 简答题
-
(简答题)
简述图的存储方法:
1、邻接矩阵(5分)
邻接矩阵是用两个数组来表示图,一个数组是一维数组,存储的顶点信息,一个数组是二维数组,即矩阵,存储顶点之间相邻的信息,也就是边(或弧)信息。如果图中有n个顶点,需要大小为n * n的二维数组来表示图。
2、邻接表(5分)
邻接表的存储方法是一种顺序存储与链式存储相结合的存储方法,顺序存储部分用来保存图中顶点的信息,链式存储部分用来保存图中边(或弧)的信息。 -
(简答题)
顺序队列的“假溢出”是怎么产生的(5分)?如何知道循环队列是空还是满(5分)?
① “假溢出”:一般的一维数组队列的尾指针已经到了数组的上界,不能再有入队操作,但其实数组中还有空位置。
② 循环队列 队空标志:front == rear,队满标志:front == (rear + 1) % m。
四. 分析题
-
(分析题)
哈夫曼编码
假设用于通信的电文仅由6个字母{A,B,C,D,E,F}组成,字母在电文中出现的频率分别为0.12,0.04,0.05,0.06,0.01,0.02。【要求该编码对应的哈夫曼树上左分支编码为0,右分支编码为1,且任意结点的左孩子权值不大于右孩子权值】
(1) (简答题)
请画出此哈夫曼树(5分)
(2) (简答题)
请写出字母对应的哈夫曼编码(5分)
A : 0
B :101
C : 110
D : 111
E : 1000
F : 1001
(3) (简答题)
如果采用一种由二进制表示的等长编码方案,至少需要几位二进制编码(2分);请给出该设计方案(3分)
至少需要3位二进制编码,设计方案为:A为000,B为001,C为011,D为010,E为110,F为111
(4) (简答题)
对于上述实例,分析两种方案的编码长度,分析两种方案的优缺点(5分)。 -
(分析题)
求两点之间的最短路径,给定图G如下图:
(1) (简答题)
写出Dijistra算法思想(5分)
从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。
(2) (简答题)
请写出点A到点F最短路径的详细过程(10分)
(3) (简答题)
写出点A到点F最终的路径(3分)
A -> C -> D -> F
(4) (简答题)
并求出点A到点F最终的路径长度(2分)
最终长度为 3 + 3 + 3 = 9
五. 计算题
-
(计算题)
散列表冲突解决
将关键字序列{47,7,29,11,9,84,54,20,30}散列存储到散列表中,散列表的存储空间是一个下标从0开始的一维数组,散列函数为:H(key)=key mod 11,处理冲突采用线性探测再散列法,要求装填(载)因子为0.69。
(1)请画出所构造的散列表;(5分)
注:表长计算方式:关键字个数 * 装填因子 = 9 * 0.69 = 13 (四舍五入)
(2)分别计算等概率情况下,查找成功和查找不成功的平均查找长度。(5分)
ASLsucc = (1+7+1+1+2+1+4+2+4)/9 = 23/9
ASLunsucc = (3+2+1+2+1+1+1+9+8+7+6+5+4)/13 = 50/13 -
(计算题)
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。对关键字序列:49,38,65,97,76,13,27,49采用冒泡排序升序方法。那么请写出第一趟冒泡后的结果(5分),并分析出冒泡排序在最好情况和最坏情况下的时间复杂度(5分)。
第一趟冒泡后的结果:38 49 65 76 13 27 49 97
最好情况,即已知序列有序,只需要遍历一遍序列,时间复杂度为 O(n);
最坏情况,即已知序列逆序,需要的时间为 T = n * (n - 1) / 2,时间复杂度为 O(n2)