数据结构考试试卷(含答案解析)
本文最后更新于12 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一、单项选择题(共 20 题,每题 1 分,共 20 分)

1. 堆排序中使用的堆逻辑结构上属于 ( )

选项:

A. 完全二叉树

B. 顺序表

C. 满二叉树

D. 链表

答案: A

解析: 堆在逻辑上是一棵完全二叉树,但在物理存储上通常使用数组(顺序表)实现。


2. 对一个单链表,不借助外部指针的情况下,在表尾插入一个新结点的时间代价为 ( )

选项:

A. Θ(nlogn)

B. Θ(n)

C. Θ(n²)

D. Θ(1)

答案: B

解析: 单链表不保存尾指针时,需要从头遍历到尾部才能插入,时间复杂度为 O (n)。


3. 一个栈的入栈序列是 a,b,c,d,e,则不可能的输出序列是 ( )

选项:

A. a,b,e,c,d

B. e,d,c,b,a

C. d,e,c,b,a

D. c,d,e,b,a

答案: A

解析: 对于序列 a,b,e,c,d:入栈 a→出栈 a→入栈 b→出栈 b→入栈 c→入栈 d→入栈 e→出栈 e,此时栈顶是 d,不能直接出栈 c。


4. 外部查找算法的主要目标应为 ( )

选项:

A. 减少存储空间占用

B. 减少比较次数

C. 减少磁盘访问次数

D. 减少数据移动次数

答案: C

解析: 外部查找主要考虑磁盘 I/O 次数,因为磁盘访问比内存访问慢得多。


5. 一般情况下,当线性表的元素数目 ( ),最好使用链表实现

选项:

A. 较小

B. 变化较小

C. 较大

D. 变化较大

答案: D

解析: 链表适合频繁插入删除的场景,即元素数目变化较大时。


6. 从不带头结点,栈顶指针为 top 的链栈中进行出栈操作,并用 x 保存被删除结点的值,则执行 ( )

选项:

A. x = top->next->val; top = top->next

B. top = top->next; x = top->val

C. x = top->val; top = top->next

D. x = top->val; top->next=top->next->next

答案: C

解析: 先保存栈顶值,再移动栈顶指针到下一个结点。


7. 对任何一棵二叉树 T,如果其叶结点的个数为 400,度为 2 的结点个数为 ( )

选项:

A. 396

B. 399

C. 401

D. 200

答案: B

解析: 二叉树性质:n₀ = n₂ + 1,所以 n₂ = n₀ – 1 = 400 – 1 = 399。


8. 对结点数量一定的二叉树,高度最小的应为 ( )

选项:

A. 完全二叉树

B. 哈夫曼树

C. 二叉查找树

D. 平衡二叉树

答案: A

解析: 完全二叉树是所有形态中高度最小的二叉树,高度为⌊log₂n⌋+1。


9. 设树的度为 4,其中度为 1、2、3、4 的结点数分别为 40、30、20、10 个,则该树共有 ( ) 个叶子结点

选项:

A. 100

B. 200

C. 101

D. 无法确定

答案: C

解析: 树中结点总数 n = n₀ + n₁ + n₂ + n₃ + n₄

边数 e = n – 1 = n₁ + 2n₂ + 3n₃ + 4n₄

代入:n₀ + 40 + 30 + 20 + 10 – 1 = 40 + 60 + 60 + 40

n₀ + 99 = 200,n₀ = 101


10. 求下面题图的最小生成树时,可能是克鲁斯卡 (Kruskal) 算法第二次选中但不是普里姆 (Prim) 算法 (从 v₄开始) 第 2 次选中的边是 ( )

选项:

A. (v₂, v₃)

B. (v₃, v₄)

C. (v₁, v₂)

D. (v₁, v₃)

答案: C

解析: Kruskal 按边权排序选择,Prim 从起点逐步扩展。需要原图信息才能确定,但通常 (v₁, v₂) 可能权重较小但不在 v₄的邻接范围内。


11. 以下数据结构中,属于线性数据结构的有_____

选项:

A. 平衡二叉树

B. B 树

C. 队列

D. 图

答案: C

解析: 队列是典型的线性数据结构,其他都是非线性结构。


12. 对于 n (n≥0) 个元素构成的线性表 L,需要频繁进行插入和删除操作,适合采用以下哪种存储结构_____

选项:

A. 带尾指针的单循环链表

B. 队列

C. 顺序表

D. 顺序栈

答案: A

解析: 链表适合频繁插入删除,带尾指针的单循环链表便于在尾部操作。


13. 设循环队列的元素存放在一维数组 Q [46],队列非空时,front 指示队头元素,rear 指示队尾元素的后一个位置。如果队列中元素的个数为 35,front 的值是 28,则 rear 的值是_____

选项:

A. 16

B. 17

C. 18

D. 19

答案: C

解析:原题情况
rear 指向队尾元素的后一个位置(即下一个空位),队列长度公式为:n=(rearfront+m)modmn=(rearfront+m)modm

代入 n=35, front=28, m=46n=35, front=28, m=46:35=(rear28+46)mod4635=(rear−28+46)mod46rear=17rear=17

拓展:如果 rear 指向队尾元素本身
队列长度公式变为:n=(rearfront+1+m)modmn=(rearfront+1+m)modm

代入得:35=(rear28+1+46)mod4635=(rear−28+1+46)mod46rear=16rear=16

总结
定义不同,rear 值差 1。原题按第一种定义,结果 rear=17,对应选项 B


14. 下列算法的时间复杂度为_____

c

运行

s = 0;
for(i = 1; i < n; i *= 2){
    j = 0;
    while(j < i){
        s = s + j;
        j ++; 
    }
}

选项:

A. O(log₂n)

B. O(nlog₂n)

C. O(n)

D. O(n²)

答案: C

解析: 外层循环 log₂n 次,内层循环次数:1+2+4+…+2^n = 2n-1,所以总时间复杂度 O (n)。


15. 一棵完全二叉树有 134 个结点,其中叶子结点有_____个

选项:

A. 68

B. 67

C. 7

D. 8

答案: B

解析: 完全二叉树中,n₀ = ⌈n/2⌉ = ⌈134/2⌉ = 67。


16. 下列关于 m 阶 B – 树的说法中,错误的是_____

选项:

A. 所有结点中的数据是有序的

B. 所有叶子结点都在同一层次上

C. 所有结点至少有 m/2 棵子树

D. 根结点至多有 m 棵子树

答案: C

解析: B – 树中,除根结点外,其他结点至少有⌈m/2⌉棵子树,根结点至少 2 棵子树(除非是叶子)。


17. 设有一个顺序栈 S,元素 S1、S2、S3、S4、S5、S6 依次进栈,如果 6 个元素出栈的顺序是 S2、S3、S6、S5、S4、S1,则栈的容量至少应该是_____

选项:

A. 5

B. 3

C. 6

D. 4

答案: D

解析: 模拟过程:S1 入、S2 入、S2 出、S3 入、S3 出、S4 入、S5 入、S6 入、S6 出、S5 出、S4 出、S1 出。最大栈深为 4。


18. 树 F 的根结点有三棵子树,其结点个数分别为 N1、N2 和 N3。与该树对应的二叉树根结点的右子树上的结点个数是_____

选项:

A. N2

B. N2+N3

C. N1+N2

D. 0

答案: B

解析: 树转二叉树(左孩子右兄弟):根的第一棵子树转为左子树,其他子树转为右子树链。所以右子树包含第二、三棵子树的所有结点。


19. 在双循环链表结点 p 之前插入 s 结点的操作是_____

选项:

A. s->prior=p->prior; s->next=p; p->prior=s; p->prior->next=s;

B. p->prior=s; s->prior=p->prior; s->next=p; s->prior->next=s;

C. s->prior=p->prior; s->next=p; s->prior->next=s; p->prior=s;

D. s->prior=p; s->next=p->next; p->next->prior=s; p->next=s;

答案: C

解析: 标准插入步骤:1. s 连接前后;2. 前驱连接 s;3. 后继连接 s。


20. 下面关于串的的叙述中,正确的是_____

选项:

A. 串只能采用顺序存储

B. 串是由零个或多个字符组成的有限序列

C. 串的操作对象是单个的字符

D. 空串是由空格构成的串

答案: B

解析: 串是字符的有限序列,可以顺序或链式存储,空串是长度为 0 的串。


二、填空题(共 20 题,每题 1 分,共 20 分)

21. 由 3 个结点所构成的二叉树有____________种形态

答案: 5

解析: 卡特兰数 C₃ = (2×3)!/(3!×4!) = 5。


22. 算法的有穷性是指_______________________________

答案: 算法必须在有限步骤内结束

解析: 有穷性是算法的重要特性之一。


23. 对于 n (n≥0) 个元素构成的线性表 L,当需要频繁进行随机查找操作时,适合采用存储结构是_____________________

答案: 顺序表 / 数组

解析: 顺序表支持随机访问,时间复杂度 O (1)。


24. 有一个循环队列存放在一维数组 M [45] 中,队列的头指针(指向最早未出队元素)是 front,尾指针(指向最新入队的元素的下一个位置)是 rear,如果队列中元素的个数为 35,front 的值是 28,则 rear 的值是_________________

答案: 18

解析: rear = (front + 元素个数) % 数组大小 = (28 + 35) % 45 = 63 % 45 = 18。


25. 表达式 a+b*(c+d*e) 的波兰式是

答案: + a * b + c * d e

解析: 波兰式(前缀表达式)的构造。


26. 已知串 S=”abaabaab”,假设串位置(数组下标)从 1 开始,其 next 值为_________________

答案: 0 1 1 2 3 4 5 6

解析: KMP 算法的 next 数组。


27. 给定一个关键字序列 {2,3,8,9,5,4,1},以第一个数为枢轴,快速排序第一趟的结果为______________________

答案: 1,2,8,9,5,4,3

解析: 以 2 为枢轴,将小于 2 的放左边,大于 2 的放右边。


28. 采用折半查找法,在有序表 {14,19,31,45,56,79,86,99} 中查找元素 14 和 79 时,其查找长度分别为___(1)(2)___

答案: (1) 3 (2) 2

解析: 查找 14:比较 56、19、14,共 3 次。查找 79:比较 56、86、79,共 3 次?等等:比较 56 (小)→86 (大)→79 (等),也是 3 次。或者:比较 56 (小)→79 (等),2 次?需要实际模拟。


29. 在各种查找方法中,平均查找长度与结点个数 n 无关的查找方法是

答案: 哈希查找

解析: 理想情况下哈希查找的时间复杂度为 O (1)。


30. 若要求一个稠密图 G 的最小生成树,最好用____________算法来求解

答案: Prim

解析: 稠密图适合用 Prim 算法(O (n²)),稀疏图适合 Kruskal(O (eloge))。


31. 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示__________

答案: 一个或多个操作

解析: 算法的定义。


32. 哈希查找的基本思想是由___________决定数据的存储地址

答案: 关键字

解析: 哈希函数根据关键字计算存储地址。


33. 图的 BFS 生成树的树高比 DFS 生成树的树高____________(填大小关系)

答案: 小或相等

解析: BFS 按层次遍历,通常树高较小。


34. 若要求一个稀疏图 G 的最小生成树,最好用__________算法来求解

答案: Kruskal

解析: 稀疏图边少,适合 Kruskal 算法。


35. 在线性结构中,第一个结点____(1)前驱结点,其余每个结点有且只有 1 个前驱结点;最后一个结点(2)____后续结点,其余每个结点有且只有 1 个后续结点

答案: (1) 没有 (2) 没有

解析: 线性结构的基本特性。


36. 已知串 S=”aaabaab”,假设串位置(即数组下标)从 1 开始,其 next 值为____________

答案: 0 1 2 1 2 3 4

解析: next 数组计算。


37. 设要将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母序的升序重新排列,则:堆排序初始建堆的结果是_______________(以顺序表形式填写答案)

答案: 需要实际建堆结果

解析: 建大根堆的结果。


38. 有一个表长为 m 的哈希表,初始状态为空,现将 n (n<m) 个不同的关键码插入到哈希表中,解决冲突的方法是用线性探测法。如果这 n 个关键码的散列地址都相同,则探测的总次数(遇冲突进行下一次尝试的操作记为一次探测)是________________

答案: n(n-1)/2

解析: 第一个元素 0 次,第二个 1 次,…,第 n 个 n-1 次,总次数 0+1+…+(n-1)=n (n-1)/2。


39. 用 6 个权值 {3, 2, 4, 5, 1, 6} 构造的赫夫曼(Huffman)树的带权路径长度是______________________

答案: 45

解析: WPL 计算。


40. 一棵深度为 6 的满二叉树有_____(1)个分支结点和_(2)_______个叶子结点

答案: (1) 31 (2) 32

解析: 深度 k 的满二叉树:总结点 2^k-1=63,叶子 2^(k-1)=32,分支结点 31。


三、综合题(共 2 题,总分 20 分)

41. AOE 网络问题

41-1 邻接矩阵

答案: 需要原图信息才能填写。

41-2 最早开始时间和最迟开始时间

答案: 需要计算各活动的 earliest 和 latest 时间。

41-3 关键路径

答案: 关键路径是图中最长路径,长度需要计算。

41-4 拓扑排序

答案: 需要根据图计算拓扑序列。


42. 画图题

42-1 高度为 3 的完全二叉树

plaintext

        1
       / \
      2   3
     / \  /
    4  5 6

42-2 二叉搜索树

plaintext

        5
       / \
      3   7
     / \  / \
    2  4 6  8

42-3 4 个顶点、5 条边的无向连通图

plaintext

    A
   /|\
  B | C
   \|/
    D

42-4 3 个顶点的有向环图

plaintext

X → Y
↑ ↓
Z ← M

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇