数据结构期末复习整理

数据结构练习题及答案合集

第1章 绪论(单选题)

满分:34分 共17题(每题2分)

  1. “数据结构”是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的( )和操作等的学科。

    • A)运算
    • B)结构
    • C)关系
    • D)算法
      答案:C
  2. 算法的时间复杂度与( )有关

    • A)问题规模
    • B)程序设计语言
    • C)计算机硬件性能
    • D)编译程序质量

    答案:A

  3. 计算机算法指的是( )。

    • A)计算方法
    • B)排序方法
    • C)解决问题的步骤序列
    • D)调度方法

    答案:C

  4. 计算机算法必须具备( )这三个特性。

    • A)可执行性、可移植性、可扩充性
    • B)可执行性、确定性、有穷性
    • C)确定性、有穷性、可行性
    • D)易读性、稳定性、安全性

    答案:C

  5. 在数据结构中,从逻辑上可以把数据结构分为( )两大类。

    • A)内部结构和外部结构
    • B)线性结构和非线性结构
    • C)紧凑结构和非紧凑结构
    • D)静态结构和动态结构

    答案:B

  6. 数据的逻辑结构是指( )的整体。

    • A)数据项之间逻辑关系
    • B)存储结构之间关系
    • C)数据类型之间关系
    • D)数据元素之间逻辑关系

    答案:D

  7. 下面说法错误的是( )。

    • A)数据项是数据中不可分割的最小单位
    • B)数据元素是数据的基本单位
    • C)数据项可由若干个数据元素构成
    • D)数据可由若干个数据元素构成

    答案:C

  8. 以下数据结构中,哪一个是线性结构( )。

    • A)有向图
    • B)二叉树
    • C)线索二叉树
    • D)栈

    答案:D

  9. 在数据结构中,与所使用的计算机无关的是( )。

    • A)存储结构
    • B)逻辑结构
    • C)物理结构
    • D)逻辑结构和物理结构

    答案:B

  10. 在下面的程序段中

    for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
        x=x+1;
    

    对x的赋值语句的频度为( )

    • A)O(2n)
    • B)O(n)
    • C)O(n²)
    • D)2为底n的对数

    答案:C

  11. 下列语句的时间复杂度为( )。

    for(i=1;i<=n;i++)
      for(j=i;j<=n;j++)
        y++;
    
    • A)O(1)
    • B)O(n²)
    • C)O(n)
    • D)O(n³)

    答案:B

  12. 下列语句的时间复杂度为( )。

    for(j=1;j<=n;j++)
      x++;
    
    • A)O(1)
    • B)O(n)
    • C)O(n²)
    • D)O(n³)

    答案:B

  13. 在数据结构中,数据的基本单位是( )。

    • A)数据项
    • B)数据元素
    • C)数据对象
    • D)数据文件

    答案:B

  14. 算法分析的目的是( )。

    • A)研究算法中输入和输出的关系
    • B)分析算法的易读性和健壮性
    • C)找出数据结构的合理性
    • D)分析算法的效率以求改进

    答案:D

  15. 数据元素及其关系在计算机存储器内的表示,称为数据的( )。

    • A)逻辑结构
    • B)存储结构
    • C)线性结构
    • D)非线性结构

    答案:B

  16. 数据的最小单位是( )。

    • A)数据项
    • B)数据类型
    • C)数据元素
    • D)数据变量

    答案:A

  17. 计算机算法指的是( ),它具有输入、输出、可行性、确定性和有穷性等五个特性。

    • A)计算方法
    • B)解决问题的优先运算序列
    • C)排序方法
    • D)调度方法
      答案:B

第2章 线性表(单选题)

满分:28分 共14题(每题2分)

  1. 采用顺序存储结构存储的线性表,其第一个的地址为100,每个元素的长度为2,则第5个元素的地址为( )。

    • A)110
    • B)108
    • C)100
    • D)120
      答案:B
  2. 不带头结点的单链表head为空的判定条件是( )。

    • A)head==NULL
    • B)head->next==NULL
    • C)head->next==head
    • D)head!=NULL
      答案:A
  3. 带头结点的单链表head为空的判定条件是( )。

    • A)head==NULL
    • B)head->next==NULL
    • C)head->next==head
    • D)head!=NULL
      答案:B
  4. 非空循环单链表head的尾结点(由p指向)满足( )。

    • A)p->next==NULL
    • B)p==NULL
    • C)p->next==head
    • D)p=head
      答案:C
  5. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行( )。

    • A)s->next=p;p->next=s
    • B)s->next=p->next;p->next=s
    • C)s->next=p->next;p=s
    • D)p->next=s;s->next=p
      答案:B
  6. 从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需要平均比较( )个结点。

    • A)n
    • B)n/2
    • C)(n-1)/2
    • D)(n+1)/2
      答案:D
      单单链表的查找规则:单链表无法随机访问,只能从表头开始顺序查找,逐个对比结点值是否等于 x。
      所有成功查找的情况:

    最好情况:目标结点是第 1 个,仅需比较 1 次。
    最坏情况:目标结点是第 n 个,需比较 n 次。
    中间情况:目标结点是第 k 个(k 从 1 到 n),需比较 k 次。

平均次数计算:

所有成功情况的比较次数总和为 1+2+3+…+n,求和公式为 n (n+1)/2。
假设每个结点是目标的概率相等(均为 1/n),平均次数 = 总次数 ÷n = [n (n+1)/2]÷n = (n+1)/2。

链表的查找规则:单链表无法随机访问,只能从表头开始顺序查找,逐个对比结点值是否等于 x。
所有成功查找的情况:

最好情况:目标结点是第 1 个,仅需比较 1 次。
最坏情况:目标结点是第 n 个,需比较 n 次。
中间情况:目标结点是第 k 个(k 从 1 到 n),需比较 k 次。

平均次数计算:

所有成功情况的比较次数总和为 1+2+3+…+n,求和公式为 n (n+1)/2。
假设每个结点是目标的概率相等(均为 1/n),平均次数 = 总次数 ÷n = [n (n+1)/2]÷n = (n+1)/2。
  1. 在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( )。

    • A)O(1)
    • B)O(n²)
    • C)O(n)
    • D)O(nlog₂n)
      答案:C
  2. 在一个长度为n的顺序表中,向第i个元素(1<=i<=n+1)位置插入一个新元素时需要移动( )个元素。

    • A)n-i
    • B)n-i+1
    • C)n-i-1
    • D)i
      答案:B
    插入位置在中间(i=3,n=5)
    假设顺序表长度 n=5,元素依次为 [a1, a2, a3, a4, a5](位置 1 到 5)。
    要插入新元素到第 i=3 个位置,最终结果需为 [a1, a2, 新元素,a3, a4, a5]。
    移动逻辑:插入位置 i=3 及后面的元素都要向后移 1 位。
        需移动的元素是 a3、a4、a5,共 3 个。
    公式验证:n-i+1 = 5-3+1=3,和实际移动个数一致。
  1. 线性表若采用链表存储结构时,要求内存中可用存储单元的地址()。

    • A)必须是连续的
    • B)部分地址必须是连续的
    • C)一定是不连续的
    • D)连续不连续都可以
      答案:D
  2. 链表不具有的特点是( )。

    • A)可随机访问任一个元素
    • B)不必事先估计存储空间
    • C)插入删除不需要移动元素
    • D)所需空间及线性表长度成正比
      答案:A
  3. 若线性表最常用的操作是存取第i个元素及其前趋的值,那么最节省操作时间的存储方式是( )。

    • A)单链表
    • B)双链表
    • C)单循环链表
    • D)顺序表
      答案:D
  4. 对于一个线性表,若既要求能够进行较快地插入和删除,又要求存储结构能够反映出数据元素之间的关系,则应该以( )。

    • A)顺序方式存储
    • B)链式存储
    • C)散列方式存储
    • D)散列方式存储
      答案:B
  5. 在一个长度为n的顺序表中删除第i个元素(1<=i<=n-1)时,需向前移动()个元素。

    • A)n-i-1
    • B)n-i
    • C)n-i+1
    • D)i
      答案:B
  6. 在一个具有n个结点的单链表的p结点之后插入一个新结点s的算法时间复杂度为( )。

    • A)O(n)
    • B)O(1)
    • C)O(n²)
    • D)O(n³)
      答案:B

第3章 栈和队列(单选题)

满分:24分 共12题(每题2分)

  1. 一个栈的输入序列为1,2,3,…,n,若输出序列的第1个元素为n,输出第i(1<=i<=n)个元素是( )。

    • A)不确定
    • B)n-i+1
    • C)i
    • D)n-i
      答案:B
  2. 如果用数组A[1…100]来实现一个大小为100的栈,并且用变量top来指示栈顶,top的初值为0,表示栈空。请问在top为100时,再进行入栈操作,会产生( )。

    • A)正常动作
    • B)溢出
    • C)下溢
    • D)同步
      答案:B
  3. 栈可以在( )中应用。

    • A)递归调用
    • B)子程序调用
    • C)表达式求值
    • D)A,B,C
      答案:D
  4. 链式存储的队列,在进行删除运算时,( )。

    • A)仅修改头指针
    • B)仅修改尾指针
    • C)头、尾指针都要修改
    • D)头、尾指针可能都要修改
      答案:D
  5. 循环队列A[0...m-1]存放其元素值,分别用front和rear表示队头和队尾,则当前队列中的元素个数是( )。

    • A)(rear- front+ m) %m
    • B)rear- front+ 1
    • C)rear- front- 1
    • D)rear- front

    答案:A

  6. 将一个递归算法改为对应的非递归算法时,通常需要使用( )。

    • A)栈
    • B)队列
    • C)循环队列
    • D)优先队列

    答案:A

  7. 循环队列sq的队满条件为( )。

    • A)(sq.rear+1)%maxsize==(sq.front+1)%maxsize
    • B)(sq.rear+1)%maxsize==sq.front
    • C)(sq.rear)%maxsize==sq.front+1
    • D)sq.rear==sq.front
      答案:B
  8. 一个栈的输入序列是1 2 3 4 5,则下列序列中是栈的输出序列的是( )。

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

    • A)1和5
    • B)2和4
    • C)4和2
    • D)5和1
      答案:A
  10. 循环队列的队空条件为()。

    • A)sq.rear==sq.front
    • B)(sq.rear+1)%maxsize==sq.front+1
    • C)(sq.rear+1)%maxsize==sq.front
    • D)(sq.rear+1)%maxsize==(sq.front+1)%maxsize
      答案:A
  11. 设计一个判别表达式中左、右括号是否配对出现的算法,采用()数据结构最佳。

    • A)线性表的顺序存储结构
    • B)栈
    • C)队列
    • D)线性表的链式存储结构
      答案:B
  12. 队和栈的主要区别是( )。

    • A)所包含的运算个数不同
    • B)存储结构不同
    • C)逻辑结构不同
    • D)限定插入和删除的位置不同
      答案:D

第4-5章 树和二叉树+搜索树(单选题)

满分:34分 共17题(每题2分)

  1. 设有n个结点的二叉树上只有度为0和度为2的结点,则此二叉树中叶子结点数为______。
    • A)n/2
    • B)(n-1)/2
    • C)(n+1)/2
    • D)不能确定
      答案:C

【解析】
这种二叉树属于 满二叉树(Full Binary Tree),其性质为:
叶子结点数 = 度为 2 的结点数 + 1

设:
n = 总节点数
n₀ = 叶子节点数(度 0)
n₂ = 度为 2 的节点数

因为题目限定只有度 0 和度 2:
n = n₀ + n₂

满二叉树性质:
n₀ = n₂ + 1

两式联立:
n = (n₂ + 1) + n₂ = 2n₂ + 1

解得:
n₂ = (n - 1) / 2
n₀ = n₂ + 1 = (n + 1) / 2

所以叶子数为 (n + 1) / 2,故选 C。

  1. 已知某二叉树的后序遍历序列是DABEC,中序遍历序列是DEBAC,则其先序遍历的结点访问序列是______。
    • A)ACBED
    • B)DECAB
    • C)DEABC
    • D)CEDBA
      答案:D

【题目】
已知某二叉树的后序遍历序列是 D A B E C(写作 DABEC),中序遍历序列是 D E B A C(写作 DEBAC),则其先序遍历的结点访问序列是______。
A)ACBED
B)DECAB
C)DEABC
D)CEDBA
答案:D

【解析】

  1. 后序的最后一个结点是树的根 → 后序 D A B E C 的最后是 C,所以根为 C
  2. 在中序 D E B A C 中找到 C,左边 D E B A 属于左子树,右边为空(说明没有右子树)。
  3. 左子树对应的后序就是后序序列去掉最后一个根后的前 4 个元素:D A B E。其最后一个(E)就是左子树的根。
  4. 在左子树的中序 D E B A 中找到 E,其左边 DE 的左子树,右边 B AE 的右子树。
  5. 右子树(B A)对应的后序为剩下的 A B,最后一个 B 为该子树根,B 的右子树中序为 A(所以 AB 的右子结点)。
  6. 综合构造的树(按层次表述):
     C
    /
   E
  / \
 D   B
      \
       A
  1. 先序遍历(根—左—右)按此树得到:C E D B A(即 CEDBA)。

因此选 D(CEDBA)。

  1. 已知某二叉树的先序遍历序列是ABDGCEFH,中序遍历序列是DGBAECHF,则其后序遍历的结点访问序列是______。
    • A)BDGCEFHA
    • B)GDBECFHA
    • C)BDGAECHF
    • D)GDBEHFCA
      答案:D

【题目】
已知某二叉树的先序遍历序列是 A B D G C E F H(写作 ABDGCEFH),中序遍历序列是 D G B A E C H F(写作 DGBAECHF),则其后序遍历的结点访问序列是______。
A)BDGCEFHA
B)GDBECFHA
C)BDGAECHF
D)GDBEHFCA
答案:D

【解析】

  1. 先序的第一个结点 A 为整棵树的根。

  2. 在中序 D G B A E C H F 中找到 A,可分出:

    • 左子树的中序:D G B
    • 右子树的中序:E C H F
  3. 在先序去掉根后,紧接着是左子树的先序(长度 3):B D G

    • 左子树根为 B(先序首位),在左子树的中序 D G B 中,B 右侧为空,左侧为 D G
    • D G 的先序是 D G,所以 D 为该子树根,GD 的右子结点。
    • 因此左子树的后序为:G D B
  4. 右子树先序为剩下的 C E F H,根为 C。在右子树中序 E C H F 中,C 左为 E、右为 H F

    • 左子树 E 的后序为 E
    • 右子树中序 H F 对应先序 F H,故 F 为根、H 为左子结点,后序为 H F
    • 因此右子树的后序为:E H F C
  5. 把左、右子树后序与根结合,整棵树的后序为:

左子树后序 (G D B) + 右子树后序 (E H F C) + 根 (A)
= G D B E H F C A

【二叉树结构图】
(与解析中推导的结构完全对应)

                A
              /   \
             B     C
            /     / \
           D     E   F
            \         \
             G         H
  • 左子树后序:G D B
  • 右子树后序:E H F C
  • 全树后序:G D B E H F C A
    所以先序/中序给出的树的后序遍历序列为 GDBEHFCA,即选项 D。
  1. 根为第0层,深度为4的二叉树至多有_____个结点。
    • A)15
    • B)31
    • C)16
    • D)10
      答案:B

根为第 0 层,深度为 4 的二叉树至多有 ______ 个结点。
A)15 B)31 C)16 D)10
答案:B

【解析】
深度为 4 意味着共有层 0 到层 4,共 5 层
满二叉树第 (k) 层最多有 (2^k) 个结点,所以总结点数为:

\[2^0 + 2^1 + \dots + 2^4 = 2^{5}-1 = 31 \]

因此最多有 31 个结点,故选 B

  1. 哈夫曼树中度为1的结点个数为______。
    • A)0
    • B)1
    • C)2
    • D)不确定
      答案:A

【解析】
哈夫曼树(Huffman Tree)是一种 最优二叉树,有一个关键性质:

哈夫曼树中不存在度为 1 的结点。

原因如下:

  1. 哈夫曼树是通过“不断合并两个最小权值的树”构造的。
  2. 每次合并都把两个子树作为某个新节点的 左右孩子
  3. 因此,每个内部节点 要么没有孩子(度 0,是叶子),要么 有两个孩子(度 2)
  4. 不可能仅有一个孩子,所以 不会出现度为 1 的结点

总结:
✔ 叶子结点:度 0
✔ 内部结点:度 2
✘ 度为 1 的结点:不存在

所以正确答案是 A)0

  1. 设森林F中有三棵树,第一、第二和第三棵树的结点个数分别为m1、m2和m3。与森林F对应的二叉树根结点的右子树上的结点个数是______。
    • A)m2
    • B)m2+m3
    • C)m3
    • D)m1+m2
      答案:B

【解析】
这题考的是 森林与二叉树之间的转换规则,你只要记住两条即可:

🌲🌲🌲 森林 → 二叉树 转换规则

  1. 每棵树的根节点用右指针连接,形成链。
  2. 每个节点的所有子节点用左指针连接,形成链。

所以对于森林 F:

 Tree1 (m1 个节点)
 Tree2 (m2 个节点)
 Tree3 (m3 个节点)

转换成二叉树结构大概是这样(简化图,仅根节点示意):

  Root(T1)
      \
       Root(T2)
           \
            Root(T3)

二叉树的 根节点 是第一棵树 Tree1 的根。

❓题目问什么?

“二叉树根节点的右子树上的结点个数是多少?”

根节点是第一棵树的根,它的 右子树 就是从第二棵树的根开始的整个“右链”:

右子树包含:Tree2 全部 + Tree3 全部

所以右子树上的结点个数是:

m₂ + m₃

✔ 正确答案:B)m₂ + m₃

  1. 一棵完全二叉树上有1001个结点,其中叶子结点的个数是______。
    • A)501
    • B)500
    • C)254
    • D)505
    • E)以上答案都不对
      答案:A

【题目】
一棵完全二叉树上有 1001 个结点,其中叶子结点的个数是______。
A)501 B)500 C)254 D)505 E)以上答案都不对
答案:A

【解析】
对完全二叉树,用 数组(按层从上到下、同层从左到右)编号 1..n 的表示法很方便。
在这种编号下,凡是编号大于 ⌊n/2⌋ 的结点都是叶子(因为编号 i 的左右孩子是 2i 与 2i+1,若 i ≤ ⌊n/2⌋ 则可能有孩子;若 i > ⌊n/2⌋ 则没有孩子)。
因此叶子结点数 = 总结点数 − ⌊n/2⌋ = n − ⌊n/2⌋ = ⌈n/2⌉。
将 n = 1001 代入:叶子数 = 1001 − ⌊1001/2⌋ = 1001 − 500 = 501

所以选 A(501)。

  1. 利用二叉链表存储树,则根结点的右指针是______。
    • A)指向最左孩子
    • B)指向最右孩子
    • C)空
    • D)非空
      答案:C

利用二叉链表存储树,则根结点的右指针是______。
A)指向最左孩子 B)指向最右孩子 C)空 D)非空
答案:C

【解析】——关键在于:
这里的“树”指 普通树(多叉树),不是二叉树。
当用 二叉链表(左孩子–右兄弟表示法) 来存储普通树时:

  • 左指针(L)→ 指向该结点的第一个孩子
  • 右指针(R)→ 指向该结点的下一个兄弟

对“根结点”来说,它 没有兄弟,因此:

  • 左指针:可能指向它的第一个孩子
  • 右指针:一定没有兄弟 → 必为空

所以根节点的右指针 = NULL

选择 C(空)

  1. 下述编码中哪一个不是前缀码______。
    • A)(00,01,10,11)
    • B)(0,1,00,11)
    • C)(0,10,110,111)
    • D)(1,01,000,001)
      答案:B

【解析】什么是前缀码?
若一个编码集中,没有任何一个编码是另一个编码的前缀,则称为前缀码(Prefix Code)。


逐项检查:

A)00, 01, 10, 11

  • 任意两个前缀都不同
    → ✔ 是前缀码

B)0, 1, 00, 11

  • 0 是 00 的前缀 → 违背前缀码定义
    → ❌ 不是前缀码(正确答案)

C)0, 10, 110, 111

  • 虽然有嵌套结构,但没有谁是另一个的前缀
    → ✔ 是前缀码

D)1, 01, 000, 001

  • 01 不是 1 的前缀
  • 000 与 001 都不会是别人前缀
    → ✔ 是前缀码

因此唯一不是前缀码的是:B

  1. 在树中除根结点外,其余结点分成m(m≥0)个( )的集合T1,T2,T3…Tm,每个集合又都是树,此时结点T称为Ti的父结点,Ti称为T的子结点(1≤i≤m)。

    • A)互不相交
    • B)可以相交
    • C)叶子结点可以相交
    • D)树枝结点可以相交
      答案:A
  2. 下图所示的4棵二叉树中,( )不是完全二叉树。

    • A)图1
      image-1

    • B)图2
      image-2

    • C)图3
      image-3

    • D)图4
      image-4

    答案:C

  3. 假设在一个二叉树中,双分支结点数为14,单分支结点数为32,则叶子结点数为( )个。

    • A)14
    • B)15
    • C)16
    • D)17
      答案:B

二叉树中存在固定关系:叶子结点数 n0 = 双分支结点数 n2 + 1

  1. 在有n个叶子结点的哈夫曼树中,其结点总数为( )。
    • A)不确定
    • B)2n
    • C)2n+1
    • D)2n-1
      答案:D
      下面按你要求给出 引用格式答案与解析:

【解析】
哈夫曼树一定是一棵满二叉树(每个内部结点的度都是 2,不会出现度为 1 的结点)。
设叶子结点数为 n,内部结点数为 I。
满二叉树满足:

  • 每个内部结点提供 2 条子边,因此总边数 = 2I
  • 树的边数 = 总结点数 − 1 = (I + n) − 1
    所以:
2I = I + n − 1  
→ I = n − 1

因此总节点数为:

I + n = (n − 1) + n = 2n − 1

故哈夫曼树的结点总数必定为 2n − 1。

  1. 已知一棵完全二叉树的结点总数为10个,则最后一层的结点数为( )。
    • A)1
    • B)2
    • C)3
    • D)4
      答案:C

【解析】
完全二叉树的性质:

  • 前 h−1 层一定是满的
  • 最后一层从左到右依次填满

先找满足节点数不超过 10 的最大满二叉树:

  • 满二叉树 1 层:1
  • 满二叉树 2 层:3
  • 满二叉树 3 层:7
  • 满二叉树 4 层:15 (>10) → 不行

因此前 3 层已经放满 7 个结点,剩余结点数为:

10 − 7 = 3

这些全部落在第 4 层,因此:

最后一层的结点数 = 3。

  1. 二叉排序树( )遍历是一个有序序列。
    • A)中序
    • B)前序
    • C)后序
    • D)层次
      答案:A

【解析】
二叉排序树(BST)的核心性质:

  • 左子树所有结点 < 根结点
  • 右子树所有结点 > 根结点

因此 对 BST 进行中序遍历(左 → 根 → 右)时,会按从小到大依次访问所有结点
所以唯一得到有序序列的遍历方式就是 中序遍历

  1. 在完全二叉树(根结点从1开始编号)中,当i为奇数且不等于1时,结点i的左兄弟是结点( ),否则没有左兄弟。
    • A)i+1
    • B)2i-1
    • C)2i+1
    • D)i-1
      答案:D

【题目】
在完全二叉树(根结点从1开始编号)中,当 i 为奇数且不等于 1 时,结点 i 的左兄弟是结点( ),否则没有左兄弟。
A)i+1
B)2i-1
C)2i+1
D)i-1
答案:D

【解析】
完全二叉树按顺序编号时:

  • 兄弟节点一定是两个连续的编号:左为偶数,右为奇数。

  • 因此若 i 为奇数(且 i ≠ 1),它必定是某一对兄弟中的 右兄弟

    • 例如:2 和 3;4 和 5;6 和 7……

右兄弟的左兄弟的编号就是:

\[i - 1 \]

所以选 D)i-1

  1. 假设根结点为第1层,则在一棵二叉树上第5层的结点数最多为( )。
    • A)4
    • B)32
    • C)8
    • D)16
      答案:D

第6章 图(单选题)

满分:32分 共16题(每题2分)

  1. 具有4个结点的无向图最多有( )条边
    • A)6
    • B)12
    • C)16
    • D)20
      答案:A

【解析】
一个无向简单图(没有自环,没有重边)若有 ( n ) 个结点,则最多可能的边数为:

\[\frac{n(n-1)}{2} \]

本题 ( n = 4 ):

\[\frac{4 \times 3}{2} = 6 \]

因此,最多 6 条边

  1. 对于具有n个顶点的连通无向图,其边的个数至少为( )。

    • A)n-1
    • B)n
    • C)n+1
    • D)nlog₂n
      答案:A
  2. 在一个图中,所有顶点的度之和等于所有边数的( )倍。

    • A)1/2
    • B)2
    • C)1
    • D)4
      答案:B
关键推导依据

    顶点度数的定义:顶点的度是指与该顶点相连的边的数量(无向图中直接计数,有向图中需区分入度和出度,总度数 = 入度 + 出度)。
    边与顶点的关联规律:任意一条边都必然连接两个顶点,会同时为这两个顶点的度数各贡献 1。

推导过程

    通用逻辑:每条边对应两个顶点的度数增量,即 1 条边会使所有顶点的度之和增加 2。
    实例验证:
        无向图:假设有 2 条边(A-B、B-C),顶点 A 度 = 1、B 度 = 2、C 度 = 1,总度数 = 1+2+1=4,边数 = 2,4=2×2,符合 2 倍关系。
        有向图:假设有 2 条边(A→B、B→C),顶点 A 出度 = 1(总度 1)、B 入度 1 + 出度 1=2、C 入度 1(总度 1),总度数 = 1+2+1=4,边数 = 2,同样满足 4=2×2。
    本质原因:边是顶点之间的连接关系,每条边都被两个顶点 “共享”,度数统计时会被计算两次,因此总度数必然是边数的 2 倍。

  1. 在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的( )倍。
    • A)1/2
    • B)2
    • C)1
    • D)4
      答案:C

【解析】
在有向图中,每条有向边都会:

  • 一个顶点 +1 入度
  • 另一个顶点 +1 出度

因此,对于每条边:
入度贡献 1 次,出度贡献 1 次 → 始终相等

所以有:

\[\sum \text{入度} = \sum \text{出度} \]

即两者之比为 1 倍,答案为 C)。

  1. 对于具有n个顶点的强连通图,其弧条数的最小值为( )。
    • A)n+1
    • B)n
    • C)n-1
    • D)n-2
      答案:B
关键推导依据

    强连通图的定义:有向图中任意两个不同顶点 u 和 v,都存在从 u 到 v 的路径,且存在从 v 到 u 的路径,即顶点间双向可达。
    弧数最少的强连通结构:当有向图构成有向环时,弧数最少且满足强连通性,这是强连通图的极简结构。

推导过程

    有向环的弧数特征:n 个顶点构成有向环时,每个顶点恰好有 1 条出弧和 1 条入弧,总弧数 = 顶点数 n(如 3 个顶点 A→B、B→C、C→A,共 3 条弧,对应 n=3)。
    验证最小值:若弧数为 n-1,无法构成闭环(最多是链状有向图),必然存在顶点无法双向可达(比如 A→B、B→C,n=3 弧数 = 2,无法从 C 到 A),不满足强连通性。
    实例验证:n=2 时,需 2 条弧(A→B、B→A)构成环,才能强连通,弧数 = 2=n;n=4 时,4 条弧构成 A→B、B→C、C→D、D→A,任意两点双向可达,弧数 = 4=n,是最小值。

【解析】
强连通要求任意顶点都能到达其他所有顶点。
若要用最少弧实现这一点,只需构成一个 有向环
v1 → v2 → … → vn → v1
这是最小强连通结构,共 n 条弧,再少就不连通。

  1. 图的深度、广度优先遍历算法分别类似于二叉树的( )。

    • A)先序遍历和中序遍历
    • B)先序遍历和层序遍历
    • C)后序遍历和中序遍历
    • D)层序遍历和先序遍历
      答案:B
  2. 有n个顶点e条边的无向图G,它的邻接表中的表结点总数是( )。

    • A)2n
    • B)n
    • C)2e
    • D)e
      答案:C
关键推导依据

    邻接表的存储规则:无向图中,每条边(u-v)会被存储两次 —— 在顶点 u 的邻接链表中添加一个指向 v 的表结点,同时在顶点 v 的邻接链表中添加一个指向 u 的表结点。
    表结点的含义:邻接表中的表结点专门记录与当前顶点直接相连的顶点信息,每条边对应两个表结点(双向记录)。

推导过程

    单条边的表结点数量:1 条无向边对应 2 个表结点(分别属于两个端点的邻接链表)。
    总表结点数计算:总边数为 e,每条边贡献 2 个表结点,因此表结点总数 = 2×e=2e。
    实例验证:假设有 3 条无向边(A-B、B-C、A-C),e=3。顶点 A 的邻接链表有 B、C 两个表结点,顶点 B 的邻接链表有 A、C 两个表结点,顶点 C 的邻接链表有 B、A 两个表结点,总表结点数 = 2+2+2=6=2×3=2e,完全匹配。

  1. 连通图G中有n个顶点,G的生成树是( )的连通子图。
    • A)包含G的所有顶点
    • B)不必包含G的所有顶点
    • C)包含G的所有边
    • D)包含G的所有顶点和所有边
      答案:A
关键推导依据

    生成树的定义:连通图的生成树是其极小连通子图,核心要求是 “包含原图所有顶点”,且边数最少(为 n-1 条,无环)。
    生成树的核心特性:必须连通、无环、包含原图全部顶点,边数是连通图边数的下限(删除任意一条边会导致不连通,添加任意一条边会形成环)。

推导过程

    选项排除:
        B 选项 “不必包含所有顶点” 错误,生成树的核心要求就是覆盖原图所有顶点,否则不属于 “生成” 的范畴。
        C、D 选项 “包含所有边” 错误,生成树是极小连通子图,边数仅为 n-1 条,远少于原图可能的边数(原图边数≥n-1),不可能包含所有边。
    实例验证:比如有 4 个顶点的连通图(A-B、B-C、C-D、A-C),其生成树可是 A-B、B-C、C-D(含所有 4 个顶点,3 条边,无环且连通),明显只包含部分边,但必含全部顶点。

  1. 对于一个具有n个顶点的无向连通图,它包含的连通分量的个数为( )。
    • A)0
    • B)1
    • C)n
    • D)n+1
      答案:B

🎯 无向连通图一定只有 1 个连通分量
🔍 什么叫连通分量?

连通分量(Connected Component):
在无向图中,每个连通的部分就是一个连通分量。

如果图是“连通图”,意思是:
任意两个顶点之间都至少有一条路径相连。

因此,这个图整体就是一个完整的联通块,不会被分成多个部分。

📌 所以这题的关键信息是:

“无向连通图”

只要出现“连通图”,不管有多少个顶点 n,它的连通分量永远是:

👉 1 个

✅ 选项 B 正确

A)0 —— 图不可能有 0 个连通分量

B)1 —— ✔ 连通图必有且只有 1 个连通分量

C)n —— 每个点都互不相连才会有 n 个连通分量,但题目说的是“连通图”

D)n+1 —— 更不可能

🧠 小例子帮助理解

假设有 5 个顶点:

如果是连通图:

1 — 2 — 3 — 4 — 5


整个图只形成一个整体 → 连通分量 = 1

如果不是连通图,例如:

1 — 2     3 — 4     5


连通分量 = 3 个。

但题目明确是 连通图,所以答案一定是 B。

  1. 下面关于图的存储的叙述中正确的是( )。
    • A)用邻接矩阵法存储图,占用的存储空间大小只与图中结点个数有关,而与边数无关
    • B)用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关
    • C)用邻接表法存储图,占用的存储空间大小只与图中结点个数有关,而与边数无关
    • D)用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关
      答案:A
正确答案是 A,原因如下:

✅ 为什么是 A?
邻接矩阵(Adjacency Matrix)

对一个有 n 个顶点 的图,邻接矩阵是一个 n × n 的矩阵。

不管图中有没有边、边多少,都必须分配完整的矩阵空间。

因此它的空间复杂度是 O(n²),只与 顶点个数 n 有关,与边数 e 无关。

👉 所以选项 A 正确:“只与结点个数有关,而与边数无关”。

❌ 为什么其他选项错?
B 错

说邻接矩阵只与边数有关——错。边数再少也要分配 n² 空间。

C 错

邻接表包含:

n 个头结点(和结点数有关)

每条边对应一个边结点(和边数有关)

因此空间复杂度是 O(n + e)。
它不仅与结点个数有关,也与边数有关。

D 错

说邻接表只与边数有关——也不对,因为至少要分配 n 个头结点。

📌 总结
存储方式	空间复杂度	与 n 的关系	与 e 的关系
邻接矩阵	O(n²)	✔ 相关	✘ 无关
邻接表	O(n + e)	✔ 相关	✔ 相关

因此唯一正确的是 A。
  1. 在无向图G的邻接矩阵A中,若A[i,j]等于1,则A[j,i]等于( )。

    • A)1
    • B)0
    • C)i-j
    • D)不确定
      答案:A
  2. 导致图的遍历序列不唯一的因素有( )。

    • A)出发点不同、遍历方法不同
    • B)出发点不同、存储结构不同
    • C)遍历方法不同、存储结构不同
    • D)出发点不同、存储结构不同、遍历方法不同
      答案:D
✅ 1. 出发点不同 → 序列不同

以 DFS 或 BFS 为例,
从不同顶点出发,访问顺序一定会不同。

例如:

1 - 2 - 3


从 1 开始 DFS:1,2,3

从 2 开始 DFS:2,1,3 或 2,3,1
→ 出发点不同会改变序列

✅ 2. 存储结构不同 → 序列可能不同

特别是 邻接矩阵 和 邻接表 在访问邻接点时的顺序会 不一样:

邻接矩阵 中的邻接点是按顶点编号顺序检查。

邻接表 中的邻接点顺序由 链表的建立顺序 决定。

因此,即使图相同、遍历方法相同,
因为邻接点排列顺序不同,最终遍历序列可能不同。

✅ 3. 遍历方法不同(DFS vs BFS) → 序列必然不同

比如一个简单图:

1 - 2 - 3


DFS:1,2,3

BFS:1,2,3(这个例子一样,但大部分不一样)

更复杂一点:

   2
  /
1
  \
   3


DFS:1,2,3 或 1,3,2

BFS:1,2,3

→ 遍历方法(DFS/BFS)不同,序列必定不同

📌 所以三个因素都会影响遍历序列

因此:

导致图的遍历序列不唯一的因素 = 出发点 + 存储结构 + 遍历方法

答案就是 D
  1. 对于一个有向图,若一个顶点的入度为k1、出度为k2,则对应邻接表中该顶点单链表中的结点数为( )。
    • A)k1
    • B)k2
    • C)k1+k2
    • D)k1-k2
      答案:B
🎯 邻接表(Adjacency List)在有向图中的含义

对于 有向图,邻接表的结构是:

每个顶点的邻接表只存放 从该顶点出发 的边,即其 出边。

换句话说:

入度(k₁)表示有多少条边“指向”这个顶点
→ 这些边存放在别人的邻接表里,不在它自己的表中

出度(k₂)表示这个顶点“指向”多少个邻接点
→ 这些边全部存放在它自己的邻接表单链表里

因此:

📌 该顶点邻接表中的结点数 = 出度 = k₂
🔍 为什么不是 k₁ 或 k₁+k₂?

k₁(入度):都是别人指向它的边,不存在它的邻接表里

k₁+k₂:这是无向图邻接表的节点数(每一条无向边会出现两次)

k₁−k₂:完全没有意义,和邻接表结构无关

例子:有向图

我们画一个简单的有向图:

A → B
↑   ↓
D ← C


边为:

A → B

B → C

C → D

D → A

🔍 计算每个顶点的入度 / 出度
顶点	入度 k₁	出度 k₂
A	1(D→A)	1(A→B)
B	1(A→B)	1(B→C)
C	1(B→C)	1(C→D)
D	1(C→D)	1(D→A)
📌 构造有向图的邻接表(只存出边)

邻接表如下:

A: B
B: C
C: D
D: A


注意:

A 的邻接表只有 B
→ 因为只有一条出边 A → B(k₂ = 1)

A 的入度是 1(D → A),但这条边存在于 D 的邻接表 中,不在 A 的邻接表里!

🎯 结论(最关键)

一个顶点的邻接表中存的结点数 = 出度 k₂。

因为邻接表表示的是:

“这个顶点能到哪些顶点”(出边列表)

入度与它的邻接表内容完全无关!

✅ 再举一个更复杂一点的例子

假设顶点 X 有:

入度 k₁ = 3(A→X, B→X, C→X)

出度 k₂ = 2(X→Y, X→Z)

邻接表中 X 的链表内容是:

X: Y → Z


结点数 = 2 = k₂

入度的 3 条边完全不在 X 的邻接表。
  1. 在一个具有n个顶点的无向图中,若具有e条边,则所有顶点的度数之和为( )。
    • A)n
    • B)e
    • C)2e
    • D)n+e
      答案:C
握手定理:无向图所有顶点度数之和 = 2 × 边数

原因非常简单:

在无向图中,每一条边 e 连接两个顶点

连接后会让这两个顶点的度数都 +1

所以 每条边对总度数贡献 2

因此:

总度数 = 2e

🔍 举个简单例子

假设图有 3 条边:

A — B
| 
C


边:

A — B

A — C

B — C

度数:

A 的度数 = 2

B 的度数 = 2

C 的度数 = 2

总度数:

2 + 2 + 2 = 6 = 2 × 3


完全符合公式。
  1. 在一个具有n个顶点和e条边的无向图的邻接矩阵中,表示边存在的元素(又称为有效元素)的个数为()。
    • A)n
    • B)e
    • C)2e
    • D)n+e
      答案:C
邻接矩阵的定义

对于无向图:

若顶点 i 与顶点 j 有边,则矩阵元素 A[i][j] = 1

并且因为无向图没有方向,所以
A[i][j] = A[j][i]
→ 矩阵关于主对角线对称

📌 有一条无向边会出现几个“有效元素”?

例如有一条边:

i — j


在邻接矩阵里会出现:

A[i][j] = 1
A[j][i] = 1


所以 每条无向边对应两个有效元素(两个 1)。

→ 这就是为什么无向图的邻接矩阵会有 2e 个有效元素。

🔍 小例子验证

假设有 3 条边:

A—B, B—C, A—C


邻接矩阵的 1 的位置共有:

A—B:A[1][2]、A[2][1]

B—C:A[2][3]、A[3][2]

A—C:A[1][3]、A[3][1]

总计:

2 × 3 = 6 个有效元素

  1. 由一个具有n个顶点的连通图生成的最小生成树中,具有()条边。
    • A)n
    • B)n+1
    • C)n-1
    • D)2n
      答案:C

第7章 查找(单选题)

满分:12分 共6题(每题2分)

  1. 二分查找法适用于存储结构为( )的,且按关键字排好序的线性表。

    • A)顺序存储
    • B)链式存储
    • C)顺序存储或链式存储
    • D)索引存储
      答案:A
  2. 对于长度为18的顺序存储的有序表,若采用二分查找,则查找第1个元素的比较次数为( )。

    • A)3
    • B)4
    • C)5
    • D)6
      答案:B
已知:

顺序有序表长度 n = 18

用 二分查找

查找的目标是 第 1 个元素(位置最左)

🔍 二分查找查找第一个元素的过程

记住规律:

查找最左边的元素时,每次都会走到“左半边”,直到区间长度变成 1。

我们模拟:

第一次比较

区间:1 ~ 18
mid = ⌊(1+18)/2⌋ = 9
比较目标 vs a[9]

因为目标在左边 → 走左半区间:1 ~ 8

→ 比较 1 次

第二次比较

区间:1 ~ 8
mid = ⌊(1+8)/2⌋ = 4
比较目标 vs a[4]
目标在左边 → 1 ~ 3

→ 比较 2 次

第三次比较

区间:1 ~ 3
mid = ⌊(1+3)/2⌋ = 2
目标在左边 → 1 ~ 1

→ 比较 3 次

第四次比较(命中)

区间:1 ~ 1
mid = 1
找到目标

→ 比较 4 次

🎯 最终比较次数 = 4
  1. 对于一组记录的关键字值(25,38,63,74),采用折半查找25时,( )次查找成功。

    • A)4
    • B)3
    • C)2
    • D)1
      答案:C
  2. 对于顺序存储的有序表(6,10,22,26,38,41,46,50,66),若采用折半查找,则查找元素50的比较次数为( )。

    • A)2
    • B)3
    • C)4
    • D)5
      答案:B
  3. 具有12个关键字的有序表,等概率的情况下二分查找的平均检索长度ASL约为()。

    • A)3.1
    • B)2.5
    • C)4
    • D)5
      答案:A

下面给你整理成 引用格式(不破坏你的 Markdown 公式),你可以直接复制到 VSCode:


二分查找 ASL 计算过程(n = 12)

二分查找对应的判定树高度约为:

\[\lceil \log_2 12 \rceil = 4 \]

各深度节点数(最多 12 个):

  • 第 1 层:1 个
  • 第 2 层:2 个
  • 第 3 层:4 个
  • 第 4 层:5 个(本来可有 8 个,但总数只有 12 个)

计算平均查找长度 ASL:

\[ASL = \frac{1\times1 + 2\times2 + 4\times3 + 5\times4}{12} \]

\[ASL = \frac{1 + 4 + 12 + 20}{12} = \frac{37}{12} \approx 3.083 \]

所以 ASL ≈ 3.1

👉 答案:A


需要我把你前面所有题都整理成这种引用格式吗?

  1. 二叉排序树的查找效率与二叉树的树形有关,在()时其查找效率最低。
    • A)结点太多
    • B)完全二叉树
    • C)结点太复杂
    • D)呈单支树
      答案:D

第8章 排序(单选题)

满分:20分 共10题(每题2分)

  1. 下列排序算法中,第一趟排序结束后其最大或最小元素一定在其最终位置上的算法是( )。

    • A)归并排序
    • B)直接插入排序
    • C)快速排序
    • D)冒泡排序
      答案:D
  2. 其比较次数与待排序的记录的初始状态无关的是( )。

    • A)插入排序
    • B)简单选择排序
    • C)快速排序
    • D)冒泡排序
      答案:B

🎯 哪种排序的 比较次数不受初始状态影响

我们逐个分析:


B)简单选择排序 —— 比较次数固定,不随初始状态变化

简单选择排序的过程:

对第 i 趟,从区间 i ~ n 中找最小值
→ 必须比较 (n−i)

总比较次数:

\[(n-1) + (n-2) + \dots + 1 = \frac{n(n-1)}{2} \]

完全与数据是否有序、逆序、乱序 无关

因此 比较次数是固定的

👉 所以答案是 B


其他为什么不行?

A)插入排序

  • 若初始序列完全有序,比较次数 ≈ n−1(最好)
  • 若完全逆序,比较次数 ≈ n(n−1)/2(最坏)
    受初始状态影响非常大

C)快速排序

  • 若选第一个/最后一个为枢轴,序列有序时变成最坏情况 O(n²)
  • 乱序时一般达到 O(n log n)
    强烈依赖初始状态

D)冒泡排序

  • 若已完全有序,第一趟就结束(最好)
  • 若逆序,比较、交换都最多
    受初始状态影响

总结

排序算法 比较次数是否与初始状态有关?
插入排序 ✔ 有关
选择排序 ✘ 无关(比较次数固定)
快速排序 ✔ 有关(差异巨大)
冒泡排序 ✔ 有关

👉 唯一比较次数固定的是:简单选择排序

因此答案:B

  1. 一组记录的关键字值为(45,79,56,38,40,86),以第一个记录为基准,利用快速排序算法得到的第一次排序结果是( )。
    • A)
    • B)
    • C)
    • D){40,38,45,86,56,79}
      答案:C

🎯 第一次快速排序划分(以 45 为枢轴)

原序列:45, 79, 56, 38, 40, 86
枢轴(pivot)= 45

将小于枢轴的放左边,大于枢轴的放右边:

79 > 45 → 右
56 > 45 → 右
38 < 45 → 左
40 < 45 → 左
86 > 45 → 右

得到:

左区:38, 40
枢轴:45
右区:79, 56, 86

快速排序第一次划分后保持左右区的相对顺序,因此结果为:

{40, 38, 45, 56, 79, 86}

👉 所以答案:C
左右指针法会让左边逆序!
左区会变成逆序(题目会用的情况)
右区保持原顺序

如果你想让引用区域更明显,也可以在外层再加一层引用,我也可以帮你做成双层引用版本。

  1. 采用排序算法对n个元素进行排序,其排序趟数肯定为n-1趟的排序方法是( )。
    • A)插入和快速
    • B)冒泡和快速
    • C)选择和插入
    • D)选择和冒泡
      答案:C

解析:
题目问的是:无论元素初始状态如何,排序时“趟数一定是 n-1” 的算法有哪些?

对各方法的趟数特点如下:

  • 直接插入排序:外层循环固定执行 n−1 趟 ✔
  • 简单选择排序:每趟选择一个最小值,固定 n−1 趟 ✔
  • 冒泡排序:如果序列提前有序,可提前结束,不一定是 n−1 趟 ✘
  • 快速排序:递归深度与数据分布相关,不固定趟数 ✘

因此,只有 选择排序插入排序 的趟数稳定为 n−1

答案:C

如果你需要,我也能把前几题都按这种格式整理成一套“可直接用于考试复习的 Markdown”。

  1. 排序时扫描待排序记录序列,顺次比较相邻的两个元素的大小,逆序时就交换位置,这是( )的基本思想。

    • A)插入排序
    • B)归并排序
    • C)冒泡排序
    • D)堆排序
      答案:C
  2. 下列排序算法中,平均时间复杂度为O(nlog₂n)的是( )。

    • A)直接插入排序
    • B)冒泡排序
    • C)归并排序
    • D)简单选择排序
      答案:C
  3. 在对n个元素进行直接插入排序的过程中,共需进行()趟。

    • A)n
    • B)n-1
    • C)n+1
    • D)2n
      答案:B
  4. 对序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15};则采用的是( )排序。

    • A)冒泡
    • B)选择
    • C)希尔
    • D)快速
      答案:C

解析:
题目给的序列:
{15, 9, 7, 8, 20, -1, 4}
一趟排序后变成:
{4, 9, -1, 8, 20, 7, 15}

我们判断是哪种排序。

① 冒泡排序?

冒泡排序一趟只能把 最大值 冒到最后。
原序列最大数是 20,而一趟后 20 仍然在中间,顺序变化很大,不像冒泡。
→ ❌ 不可能

② 选择排序?

一趟选择排序会把 最小值 -1 放到第 1 个位置。
但结果的第 1 个位置是 4 而不是 -1。
→ ❌ 不是选择

③ 快速排序?

快排一趟会把“枢轴”放到最终位置,并把小于它的放左边大于它的放右边。
但这里序列左右毫无分区规律。
→ ❌ 不是快排

④ 那就剩下希尔排序

希尔排序第一次是按某个 gap(增量) 进行分组排序,每组内部做插入排序。

如果 gap = 3(常见增量),分组如下:

  • 第 1 组:a0=15, a3=8
  • 第 2 组:a1=9, a4=20
  • 第 3 组:a2=7, a5=-1
  • 第 4 组:a6=4

每组内进行插入排序后会得到一个“看起来很乱但部分局部有序”的结果。

题目给的结果正是“希尔排序第一次按 gap 排完”的典型乱序结构。

→ ✔ 答案:C(希尔排序)

你如果想,我可以给你“希尔排序 gap 的完整演示图”,确保考试也能看懂。

  1. 在对n个元素进行简单选择排序的过程中,需要进行()趟选择和交换。

    • A)n
    • B)n+1
    • C)n-1
    • D)n/2
      答案:C
  2. 设一组初始记录关键字序列为(50,40,95,25,10,70,60,45),则以增量d=3的一趟希尔排序结束后前4条记录关键字为( )。

    • A)25,40,50,95
    • B)10,40,60,25
    • C)10,25,40,45
    • D)25,10,70,50
      答案:D

填空题练习

  1. 算法的执行时间是 的函数。
  2. 线性结构中元素之间存在 关系。
  3. 图形结构中元素之间存在 关系。
  4. 树形结构中元素之间存在 关系
  5. 数据的存储结构包括顺序结构的表示和 的表示。
  6. 数据的逻辑结构是指 。
  7. 数据元素之间的逻辑结构有四种基本类型,分别是集合、线性、 和网状。
  8. 数据的逻辑结构在计算机内存中的存储方式称为 。
  9. 若经常对线性表进行读取操作,则最好采用 存储结构。
  10. 对于一个线性表,若既要求能够进行较快地插入和删除,又要求存储结构能够反映出数据元素之间的关系,则应该以 方式存储。
  11. 在一个长度为n的采用顺序结构存储的线性表中第i个元素(1<=i<=n)之前插入一个元素时,需要向后移动 个元素。
  12. 在一个长度为n的采用顺序结构存储的线性表中删除第i个元素(1<=i<=n)时,需要向前移动 个元素。
  13. 对于一个长度为n的顺序表,在表尾插入元素的时间复杂度为 。
  14. 对于一个长度为n的顺序表,在表头插入元素的时间复杂度为 。
  15. 在一个具有m个结点的单链表的p结点之后插入一个新结点q的算法时间复杂度为 。
  16. 在双向链表中,每个结点有两个指针域,一个指向直接前驱,另一个指向 。
  17. 循环队列的引入,目的是为了克服 。
  18. 设输入序列是1、2、3、……、n,经过栈的作用后输出序列的第一个元素是n,则输出序列中第i个输出元素是 。
  19. 当栈中元素为n个,做进栈运算时发生上溢,则说明该栈的最大容量为 。
  20. 队列是限制插入只能在线性表的一端,而删除在线性表的另一端进行的特殊线性表,其特点是 。
  21. 栈是特殊的线性表,其运算遵循 的原则。
  22. 在作进栈运算时应先判别栈是否 。
  23. 在作退栈运算时应先判别栈是否 。
  24. 若用一个大小为8的数组来实现循环队列,且当前队尾指针rear的值为4,往队列中插入两个元素后,rear的值为 。
  25. 树中节点的最大层数称为树的 。
  26. 树中的一个节点拥有的子树数称为该节点的度。度为零的节点称为 。
  27. 根所在的层次为第0层,深度为8的完全二叉树中最少有 个结点。

题目:
根所在的层次为第 0 层,深度为 8 的完全二叉树中最少有多少个结点?

解:
深度为 8(根从 0 层),说明共有:

\[8 - 0 + 1 = 9 \text{ 层} \]

前 8 层(0~7 层)必须是满的,其结点数为:

\[2^{8} - 1 = 255 \]

第 8 层至少要有 1 个结点,所以最少总结点数为:

\[255 + 1 = 256 \]

答:256

  1. 根为第0层,深度为3的二叉树至多有_____个结点。
  2. 根为第0层,具有256个结点的完全二叉树的深度为 。
  3. 一棵完全二叉树上有1001个结点,其中叶子结点的个数是 。
  4. 若二叉树中有9个度为2的结点,则有 个叶子结点。
  5. 设有n个结点的完全二叉树,如果按照从自上到下、从左到右,从1开始顺序编号,则第i个结点右孩子结点的编号为 。
  6. 设有n个结点的完全二叉树,如果按照从自上到下、从左到右,从1开始顺序编号,则第i个结点左孩子结点的编号为 。
  7. 已知无向图的结点个数为n,边的个数为e,则在其邻接表的存储结构中,表头结点有 个。
  8. 设某无向图中顶点数和边数分别为n和e,所有顶点的度数之和为d,则e= 。
  9. 已知一个图的邻接矩阵表示,计算第i个结点的入度的方法是 。
  10. 设有向图G用邻接矩阵A[n][n]作为存储结构,则该邻接矩阵中第i行上所有元素之和等于顶点i的 。
  11. G为无向图,如果从G的某个顶点出发,进行一次广度优先搜索,即可访问图的每个顶点,则该图一定是 图。
  12. 若采用邻接表存储结构,则图的广度优先搜索类似于二叉树的 ,它所用到的数据结构为队列。
  13. 20个顶点的连通图的生成树有 条边。
  14. 图的主要存储结构有两种,分别为邻接表和 。
  15. 具有8个关键字的有序表,等概率的情况下二分查找成功的平均检索长度ASL为(除不尽时保留分数) 。
  16. 二叉搜索树中左子树上所有结点的值均 根结点的值
  17. 二叉搜索树中右子树上所有结点的值均 根结点的值。
  18. 对于长度为18的顺序存储的有序表,若采用二分查找,则查找第2个元素的比较次数为 。
  19. 设一组初始记录关键字序列为(10,70,30,20),采用冒泡算法(从前往后冒)进行递增排序,则第一趟排序结束后的结果为 。
  20. 在对n个元素进行直接插入排序的过程中,共需进行 趟。
  21. 在对n个元素进行简单选择排序的过程中,共需进行 趟。

填空题答案

  1. 问题规模
  2. 一对一
  3. 多对多
  4. 一对多
  5. 链式存储
  6. 数据元素之间的逻辑关系
  7. 树形
  8. 数据的存储结构
  9. 顺序
  10. 链式
  11. n-i+1
  12. n-i
  13. O(1)
  14. O(n)
  15. O(1)
  16. 直接后继
  17. 假溢出
  18. n-i+1
  19. n
  20. 先进先出
  21. 后进先出
  22. 6
  23. 高度 (或深度)
  24. 叶结点
  25. 256
  26. 15
  27. 8
  28. 501
  29. 10
  30. 2*i+1
  31. 2*i
  32. n
  33. d/2
  34. 邻接矩阵第i列非零数的个数
  35. 出度
  36. 连通
  37. 层次遍历
  38. 19
  39. 邻接矩阵
  40. 21/8
  41. 小于
  42. 大于
  43. 3
  44. 10,30,20,70
  45. n-1
  46. n-1

posted @ 2025-11-18 20:54  LFmin  阅读(63)  评论(0)    收藏  举报