重庆邮电大学(重邮)802数据结构:2020年(答案&试题)

重邮802数据结构:2020年(答案&试题)

注:本套试卷由强连通计算机考研完成解析,但难免有疏漏,如果发现错误请及时与我们反馈。
勘误:对微信公众号“强连通计算机考研”回复“重邮802勘误”。

2020年答案

一、选择题(本大题共 15 小题,每小题 2 分,共 30 分)在这里插入图片描述二、填空题(本大题共 15 小题,每小题 2 分,共 30 分)在这里插入图片描述 三、综合应用题(本大题共 6 小题,每小题 10 分,共 60 分)在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述四、算法设计题(本大题共2小题,每小题15分,共30分)在这里插入图片描述在这里插入图片描述

2020年试题

一、选择题(本大题共 15 小题,每小题 2 分,共 30 分)

1、设三个函数 f, g, h 分别为 f ( n ) = 1000 n 3 + n 2 + 1000 f(n) = 1000n^3+n^2+1000 f(n)=1000n3+n2+1000, g ( n ) = 1000 n 3 + 5000 n 2 g(n) = 1000n^3+5000n^2 g(n)=1000n3+5000n2, h ( n ) = n 3 / 2 + 5000 n l g n h(n)=n^{3/2}+5000nlgn h(n)=n3/2+5000nlgn, 下 列 哪 个 关 系 不 成 立 ( )。
A. f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n))    B. g ( n ) = O ( f ( n ) ) g(n) = O(f(n)) g(n)=O(f(n))
C. h ( n ) = O ( n 3 / 2 ) h(n) = O(n^{3/2}) h(n)=O(n3/2)    D. h ( n ) = O ( n l g n ) h(n) = O(nlgn) h(n)=O(nlgn)

2、已知 P 结点是某双向链表的一个结点,在 P 结点后插入一个新结点 S 的语句序列是( )。
A. S->prior=P->prior; P->prior=S; S->next=P; P->prior->next=S;
B. S->prior = P; S->next = P->next; P->next->prior = S; P->next = S;
C. S->prior=P->prior; P->prior->next=S; P->prior=S; S->next=P;
D. S->prior=P; S->next=P->next; P->next=S; P->next->prior=S;

3、栈在( )中应用。
A. 递归调用    B. 子程序调用   C. 表达式求值    D. A, B, C

4、若用一个大小为 6 的数组来实现循环队列,且当前 rear 和 front 的值分别为 0 和 3,当从队列中删除一个元素,再加入两个元素 后,rear 和 front 的值分别为( )。
A. 1 和 5    B. 2 和 4    C. 4 和 2    D. 5 和 1

5、设完全二叉树的第 i=6 层有 24 个叶结点,则此树最多有( )个结点。( i≥1)
A. 55   B. 79    C. 81    D. 127

6、下列序列( )不是堆?
A. 12, 35, 39, 57, 86, 48, 42, 73, 66, 100
B. 12, 70, 33, 65, 24, 56, 48, 92, 86, 33
C. 06, 12, 20, 30, 52, 23, 42, 38, 103, 97, 66, 56
D. 05, 23, 20, 35, 28, 38, 29, 61, 56, 76, 40, 100

7、将下图中二叉树按中序线索化,结点 f 的右指针和结点 g 的左指针分别指向结点( )。
在这里插入图片描述
A. d, e    B. b, d   C. d, b    D. a, e

8、在 Huffman 编码中,若编码长度只允许小于等于 5,则除了已 对两个字符编码为 0 和 10 外,还可以最多对( ) 个字符编码。
A. 5   B. 6   C. 7   D. 8

9、设 G 是一个非连通无向图,有 28 条边,则该图的顶点数至少 有( )个。
A. 7   B. 8   C. 9   D. 10

10、对于一个有向图,若一个顶点的度为 k1, 出度为 k2,则对应逆邻接表中该顶点的入边表中的边结点数为( )。
A. k1   B. k2   C. k1-k2    D. k1+k2

11、在下图中所示的 AOE(Activity On Edge)网中,关键路径长度为( )。
在这里插入图片描述A. 23   B. 22   C. 16   D. 13

12、如果一个有向图具有拓扑有序序列,并且顶点按拓扑有序序列编号,那么其邻接矩阵必定为( )。
A. 对称矩阵    B.三对角矩阵    C.上三角矩阵   D. 下三角矩阵

13、已知一个长度为 18 的有序顺序表中,若采用折半查找法查找第 12 个元素,则比较次数是( )。
A. 3   B. 4   C. 5    D. 6

14、如果将学校所有同学按照生日(不考虑年份,只考虑月、日) 来排序,那么下列排序算法中排序速度最快的算法是( )。
A. 归并排序   B. 希尔排序    C. 快速排序    D. 基数排序

15、下列( )不是 AVL 树(平衡二叉树)。
在这里插入图片描述

二、填空题(本大题共 15 小题,每小题 2 分,共 30 分)

1、考虑函数 f ( n ) = n l o g n f(n) = nlogn f(n)=nlogn g ( n ) = n a g(n) = n^a g(n)=na,其中 a 是实数。在下列空白处填写合适的数学符号(比如>, ≥ , <, ≤ 等),使得下列函数关系成立。 f = O ( g ) f = O(g) f=O(g) : 当 a________1; g = O ( f ) g = O( f ) g=O(f) : 当 a________1。
2、表达式 a*b-c-d$e$f-g-h*i 中,运算符的优先级由高到低依次为 -, *, $,且均右结合,则相应的后缀式是________。
3、7 个元素 a、b、c、d、e、f 和 g 顺序入栈。在栈上做了 5 次弹出操作,每个出栈的元素被插入到一个队列中。从队列中删除 3 个元素并将其推回到栈中。现在,从栈中弹出一个元素,弹出的这个元素是________。
4、设一个稀疏矩阵有 1000 行 850 列,其中有 1000 个非 0 数据元素。设每个整数值占 2B,数据元素值占 4B,则用三元组表存储该矩阵时所需字节数是________。
5、一棵二叉排序树(BST,binary search/sort tree )的后序遍历序列是 15, 10, 23, 25, 20, 35, 42, 39, 30。请给出这棵树的前序遍历序列:________。
6、如果 T1 是由有序树 T 转换成的二叉树,那么 T 中结点的后根遍历顺序对应 T1 中结点的_______遍历。
7、设一棵树中只有度为0和度为3的结点,则该树的第i层(i≥1) 的结点个数最多为_______。
8、在一个图中,所有顶点的度数之和等于图的边数的_______倍。
9、一个有向图的邻接表存储如下图所示,现按深度优先搜索方式 从顶点 F 出发执行一次遍历,则得到的顶点系列是_____________。
在这里插入图片描述

10、设一个 n 个顶点的带权连通图有 n 1 / 2 l o g 2 n n^{1/2}log_2 n n1/2log2n 条边,则应该选用 _____________ (从 Prim, Kruskal 中选择一个填空)算法求这个图的最小生成树,从而使计算时间较少。
11、对于长度为 9 的有序顺序表,若采用折半查找,在相等查找概率情况下查找成功的平均查找长度为_____________,查找不成功的平均查找长度为_____________。
12、将 10 个元素散列到大小可容 100000 个元素的散列表中, _____________ 产生冲突。(请在“一定会”、“一定不会”、“仍然可能会”这些术语中选择正确的进行填空)
13、数组A中,每个元素A的长度为3个字节,行下标i从1到8, 列下标 j 从 1 到 10,从首地址 1000 开始连续存放在存储器内, 该数组按行优先存放时,元素 A[8][5]的起始地址为_____________。
14、如果有一个时间复杂度为 O ( n 2 ) O(n^2) O(n2)的算法(比如冒泡排序、选择 排序或插入排序等),在有 200 个元素的数组上运行需要耗时 3.2 毫秒。那么,在类似的有 40000 个元素的数组上运行,需要 _____________秒时间。
15、顺序文件中,要存取第 i 个记录,必须先存取 _____________个记录。

三、综合应用题(本大题共 6 小题,每小题 10 分,共 60 分)

1、下面这段 C 代码,针对输入的简单算术表达式的后缀表达式, 输出其计算结果。例如,输入 5 2 * 3 3 2 + * +,该程序输出 25。 请给出缺失的 5 行代码。

#include
#define EOF -1
void push (int); /* push the argument on the stack */ 
int pop (void);  /* pop the top of the stack */
void flagError ( );
int main ( ) 
{ int c, m, n, r;
	while ((c = getchar ( )) != EOF) 
    {	if (isdigit (c) )
			(1) ; 
     	else if ((c == '+') || (c == '*'))
        { 	m = (2) ; 
         	n= (3) ; 
         	r = (c == '+') ? n + m : n*m;
			(4)
		}
		else if (c != ' ')
			flagError ( ); 
    }
	printf("%c", (5);
}

2、一个二叉树 BT 有 10 个结点,BT 为指向树根结点的指针,其值为 6, Lchild, Rchild 分别为结点的左、右孩子指针域, data 为结点的数据域。各结点的存储结构如下表所示:

12345678910
Lchild00237580101
DataJHFDBACEGI
Rchild0009400000

请完成下列各题:
(1)画出二叉树 BT 的逻辑结构;
(2)写出按前序、中序、后序遍历该二叉树所得到的结点序列;
(3)画出二叉树的后序线索树。

3、当输入大小为 N 时,您为一个程序收集其相应的运行时间。下 表记录了在不同的输入 N 情况下,该程序对应的运行时间。

N(输入大小)Time(运行时间)
1250.03 sec
10001.00 sec
800032.00 sec
640001024.00 sec
51200032768.00 sec

请给出以 N 作为输入的函数来估计该程序的运行时间(以秒为单位)。提示: l o g b a = l g a / l g b log_ba=lga/lgb logba=lga/lgb

4、一个有向图 G 的带权邻接矩阵如下所示:

V1V2V3V4V5
V101621
V2013
V301833
V419150
V5110

请采用单源点最短路径算法 Dijkstra 求解图 G 中 V1 点到其他各点的最短路径,要求给出计算过程。

5、设有关键字序列 12, 15, 23, 56, 35,48, 5, 86, 9, 68,哈希函数为 H(Key)= Key mod 11,哈希表的地址空间为 0~10,开始时哈希 表为空,采用链地址法解决冲突,请画出依次插入关键字后的哈希表——同一链表中结点对应关键字从小到大有序。

6、下表 1 中第 0 行是待排序序列的原始输入(365 401 851 229 963 842 794 176 538); 最后一行为排序后的序列(176 229 365 401 538 794 842 851 963); 其他各行是 5 种排序算法得到的某个中间步骤的内容。表 2 列出了这 5 种排序算法。请按行序直接给出每行序列对应的排序算法的编号。每个数字只使用一次。

表1:

行号排序算法序列
第0行原始输入365 401 851 229 963 842 794 176 538
第1行365 401 851 229 963 842 794 176 538
第2行365 401 229 851 963 794 842 176 538
第3行365 401 794 176 538 963 842 851 229
第4行176 229 365 851 963 842 794 401 538
第5行176 229 851 401 963 842 794 365 538
第6行排好序的输出176 229 365 401 538 794 842 851 963

表2:

算法编号算法名称算法编号算法名称
1希尔排序(增量为5,3,1)4归并排序
2快速排序5直接插入排序
3直接选择排序6冒泡排序

四、算法设计题(本大题共2小题,每小题15分,共30分)

1、设以带头结点的双向循环链表表示的线性表为 L = ( a 1 , a 2 , a 3 , . . . , a n ) (a_1, a_2, a_3, ..., a_n) (a1,a2,a3,...,an)。试写一时间复杂度 O(n) 的算法,将 L 改造为 L = ( a 1 , a 3 , . . . , a n , . . . , a 4 , a 2 ) (a_1, a_3, ..., a_n, ..., a_4 , a_2) (a1,a3,...,an,...,a4,a2) 。要求:
(1) 描述算法的基本设计思想
(2) 根据设计思想,采用 C 语言描述算法,关键之处给出注释 。

2、ORDER公司是一个专门为人们提供排序服务的公司该公司的宗旨是:“秩序是最美丽的”。他们的工作是通过一系列移动将某些物品按顺序摆好。他们的服务是通过工作量来计算的,即移动东西的次数。所以,在工作前必须先考察工作量,以便向用户提出收费价格。用户并不知道精确的移动次数实质上大多数人是凭感觉来认定这一列物品的混乱程度。根据ORDER公司的经验,人们一般是根据“逆序对”的数目多少来称呼这一序列的混乱程度。

假设我们将序列中第i件物品的参数定义为 A i i A_ii Aii那么排序就是指将 A 1 , A i , A n A_1, A_i, A_n A1,Ai,An按从小到大的顺序排序。若i<j且 A i > A j A_i > A_j Ai>Aj则<i, j>就为一个“逆序对”。

例如:数组(3,1,4,5,2)的“逆序对”有<3,1>、❤️, 2>、<4, 2>、<5, 2>共4个。

现在OEDER公司请你写一个程序在尽量短的时间内统计出“逆序对”的数目。程序输入 n , A 1 , … , A i , … , A n , 1 ≤ n ≤ 30000 n, A_1, …, A_i, …, A_n, 1 ≤ n ≤ 30000 n,A1,,Ai,,An,1n30000 A i A_i Ai为小于200的正整数。输出序列 A 1 , … , A i … , A n A_1, …, A_i…, A_n A1,,Ai,An的“逆序对”数目,即“逆序数”。并请分析你设计的算法的时间复杂度。

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值