第一章
- 以下属于逻辑结构的是 【C】
A
A. 顺序表 B. 哈希表 C. 有序表 D. 单链表 - 以下与数据的存储结构无关的术语 【D】
C
A 循环队列 B 链表 C 哈希表 D 栈 - 以下关于数据结构的说法中,正确的是 【A】
A 数据的逻辑结构独立于其存储结构
B 数据的存储结构独立于其逻辑结构
C 数据的逻辑结构唯一决定其存储结构
D 数据结构仅由其逻辑结构和存储结构决定
注:数据的逻辑结构是从面向实际问题的角度出发的,只采用抽象表达式,独立于存储结构,数据的存储结构有多种不同的选择;而数据的存储结构是逻辑结构在计算机上的映射,她不能独立与逻辑结构而存在。 - 链式存储结构设计时,结点内的存储单元 一定连续
- 一个算法应该是 【B】
D
A 程序
B 问题求解步骤的描述
C 要满足五个基本特性
D A和C - 下面的说法中,错误的是 【A】
C
Ⅰ.算法原地工作的含义是指不需要任何额外的辅助空间 常量
Ⅱ.在相同规模 n n n 下,复杂度为 O ( n ) O(n) O(n) 的算法在时间上总是优于复杂度为 O ( 2 n ) O(2^n) O(2n) 的算法
Ⅲ.所谓时间复杂度,是指最坏情况下估算算法执行时间的一个上界
Ⅳ. 同一个算法,实现语言的级别越高,执行效率越低
A Ⅰ
B Ⅰ,Ⅱ
C Ⅰ,Ⅳ
D Ⅲ - 【2013年统考真题】已知两个长度分别为
m
m
m 和
n
n
n 的升序链表,若将他们合并为长度为
m
+
n
m+n
m+n 的一个降序链表,则最坏情况下的时间复杂度是 【D】
B
A O ( n ) O(n) O(n)
B O ( m n ) O(mn) O(mn)
C O ( m i n ( m , n ) ) O(min(m,n)) O(min(m,n))
D O ( m a x ( m , n ) ) O(max(m,n)) O(max(m,n)) 2*max(m,n)>m+n - 一个算法所需时间由下述递归方程表示,试求出该算法的时间复杂度
T ( n ) = { 1 , n = 1 2 T ( n / 2 ) + n , n > 1 T(n)=\begin{cases}1&,n=1\\2T(n/2)+n&,n>1\end{cases} T(n)={12T(n/2)+n,n=1,n>1
解:时间复杂度是 O ( n l o g 2 n ) O(nlog_2n) O(nlog2n).
设 n = 2 k ( k ≥ 0 ) n=2^k(k\ge0) n=2k(k≥0),根据题目所给定义有 T ( 2 k ) = 2 T ( 2 k − 1 ) + 2 k = 2 2 T ( 2 k − 2 ) + 2 ∗ 2 k T(2^k)=2T(2^{k-1})+2^k=2^2T(2^{k-2})+2*2^k T(2k)=2T(2k−1)+2k=22T(2k−2)+2∗2k,由此可得递推公式 T ( k ) = 2 i T ( 2 k − i ) + i ∗ 2 k T(^k)=2^iT(2^{k-i})+i*2^k T(k)=2iT(2k−i)+i∗2k,进而得 T ( 2 k ) = 2 k T ( 2 0 ) + k ∗ 2 k = ( k + 1 ) 2 k T(2^k)=2^kT(2^0)+k*2^k=(k+1)2^k T(2k)=2kT(20)+k∗2k=(k+1)2k,即 T ( n ) = 2 l o g 2 n + l o g 2 n ∗ n = n ( l o g 2 n + 1 ) T(n)=2^{log_2n}+log_2n*n=n(log_2n+1) T(n)=2log2n+log2n∗n=n(log2n+1),也就是 O ( n l o g 2 n ) O(nlog_2n) O(nlog2n).
第二章
- 若长度为
n
n
n 的非空线性表采用顺序存储结构,在表的第
i
i
i 个位置插入一个数据元素,则
i
i
i 的合法值应该是 【B】
A
A 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n
B 1 ≤ i ≤ n + 1 1 \le i \le n+1 1≤i≤n+1 - 给定有
n
n
n 个元素的一维数组,建立一个有序的单链表的最低时间复杂度是 【D】
B
A O ( 1 ) O(1) O(1)
A O ( n ) O(n) O(n)
A O ( n 2 ) O(n^2) O(n2)
D O ( n l o g 2 n ) O(nlog_2n) O(nlog2n)
第三章
- 设链表不带头结点且所有操作均在表头进行,则下列最不适合作为链栈的是 【C】
D
A 只有表头结点指针,没有表尾指针的双向循环链表
B 只有表尾结点指针,没有表头指针的双向循环链表
C 只有表头结点指针,没有表尾指针的单向循环链表
D 只有表尾结点指针,没有表头指针的单向循环链表 - 若一个栈的输入序列是
P
1
,
P
2
,
⋯
,
P
n
P_1,P_2,\cdots,P_n
P1,P2,⋯,Pn,输出序列是
1
,
2
,
3
,
⋯
,
n
1,2,3,\cdots,n
1,2,3,⋯,n,若
P
3
=
1
P_3=1
P3=1,则
P
1
P_1
P1 的值【C】
A
A 可能是2
B 一定是2
C 不可能是2
D 不可能是3 - 设有一个顺序共享栈
S
h
a
r
e
[
0
:
n
−
1
]
Share[0:n-1]
Share[0:n−1],其中一个栈顶指针
t
o
p
1
top1
top1 的初值为
−
1
-1
−1,第二个栈顶指针
t
o
p
2
top2
top2 的初值为
n
n
n ,则判断共享栈满的条件是【A】
B
A top2-top1==1
B top1-top2 ==1
C top1==top2
D 以上都不对 - 循环队列存储在数组
A
[
0
…
n
]
A[0\dots n]
A[0…n],入队时的操作为 【D】
C
C rear = (rear+1) mod n
D rear = (rear+1) mod (n+1) - 已知循环队列的存储空间为数组
A
[
21
]
A[21]
A[21],
f
r
o
n
t
front
front 指向对头元素的钱一个位置,
r
e
a
r
rear
rear 指向队尾元素,假设当前
f
r
o
n
t
front
front 和
r
e
a
r
rear
rear 的值分别为 8 和 3,则队列的长度为【C】
C 16 - 用链式存储方式的队列进行删除操作时需要【D】
A
A 仅修改头指针
D 头尾指针可能都要修改
注:队列中仅有一个元素 - 假设循环单链表表示的队列长度为
n
n
n,队头固定在链表尾,若只设头指针,则进队操作的时间复杂度为 【A】
B
A O ( n ) O(n) O(n)
B O ( 1 ) O(1) O(1) - 【2014年统考真题】循环队列放在一维数组
A
[
0
…
M
−
1
]
A[0\dots M-1]
A[0…M−1],
e
n
d
1
end1
end1 指向队头元素,
e
n
d
2
end2
end2 指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳
M
−
1
M-1
M−1 个元素。初始时为空。下列判断对空和队满的条件中,正确的是【A】
C
A 队空:end1=end2 队满:end1=(end2+1)mod M
C 队空:end2=(end1+1)mod M;队满:end1=(end2+1)mod M - 【2016统考真题】有一个100阶的三对角矩阵
M
M
M ,其元素
m
i
j
(
1
≤
i
,
j
≤
100
m_{ij}(1\le i,j \le 100
mij(1≤i,j≤100 按行优先依次压缩存入下标从
0
0
0 开始的一维数组
N
N
N 中。元素
m
30
,
30
m_{30,30}
m30,30 在
N
N
N 中的下标是 【B】
C
B 87
C 88
第五章
- 假定一颗度为 3 的树中,结点数为 50,则其最小高度为 【C】
B
B 4
C 5
注:要求满足条件的树,那么该树是一颗完全三叉树。在度为 3 的完全三叉树中,第一层有一个结点,第二层有 3 1 = 3 3^1=3 31=3 个结点,第三层有 3 2 = 9 3^2=9 32=9 个结点,第四层有 3 3 = 27 3^3=27 33=27 个结点,因此结点数之和为 1 + 3 + 9 + 27 = 40 1+3+9+27=40 1+3+9+27=40,第五层的结点数为 50-40=10。因此最小高度为 5 - 一棵有124个叶子结点的完全二叉树,最多有【248】个结点
注:在非空的二叉树中,由度为 0 0 0 和 2 2 2 的结点数的关系 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1 可知 n 2 = 123 n_2=123 n2=123;总结点数 n = n 0 + n 1 + n 2 = 247 + n 1 n=n_0+n_1+n_2=247+n_1 n=n0+n1+n2=247+n1,其最大值为248( n 1 n_1 n1 的取值为1或0)
【零解】 124 < 2 7 = 128 124<2^7=128 124<27=128,故第八层没满,前7层为完全二叉树,由此可推算出第8层可能有128个叶子结点,第七层的最右4个为叶子结点,考虑最多的情况,这4个叶子结点中的最左边可以有一个左孩子(不改变叶子结点数),因此结点总数为 2 7 − 1 + 120 + 1 2^7-1+120+1 27−1+120+1 - 设二叉树只有度为 0 和 2 的结点,其节点个数 为15,则该二叉树的最大深度为 【C】
D
C 8
D 9 - 【2009年统考真题】已知一棵完全二叉树的第六层(设根为第一层)有8个叶结点,则该完全二叉树的结点个数最多是【C】
A
A 39 C 111
注
第六层有叶结点——完全二叉树的高度可能是6也可能是7,显然树高为7结点最多 - 【2011年统考真题】假若一棵完全二叉树有768个结点,则该二叉树中叶结点的个数是【】
注:由完全二叉树的性质,最后一个分支结点的序号为 ⌊ 768 / 2 ⌋ \lfloor768/2 \rfloor ⌊768/2⌋=384,故叶子结点的个数为 768-384=384
【另解】 n = n 0 + n 1 + n 2 = 2 n 0 + n 1 − 1 n=n_0+n_1+n_2=2n_0+n_1-1 n=n0+n1+n2=2n0+n1−1,其中 n = 768 n=768 n=768,在完全二叉树中, n 1 n_1 n1 只能取 0 或 1 0或1 0或1 ,当 n 1 = 0 n_1=0 n1=0时, n n n 为小数,不合题意所以 n 1 = 1 n_1=1 n1=1,所以 n 0 n_0 n0 = 384 - 一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足【C】
A
A 所有的结点均无左孩子
C 只有一个叶结点\高度等于其结点数
注:根左右 左右根 - 【2011年统考真题】一棵二叉树的前序遍历序列和后序遍历序列分别为 1,2,3,4和4,3,2,1,该二叉树的中序遍历序列不会是【C】
A 1 2 3 4
B 2 3 4 1
C 3 2 4 1
D 4 3 2 1
注:根据选项前序+中序得出后序是否符合题目中后序 - 利用二叉链表存储森林时,根节点的右指针【D】
C
D 不一定为空
C 一定为空
注:是否只有一棵树 - 对于一个有
n
n
n 个顶点的图:若是连通无向图,其边的个数至少为【n-1】;若是强连通有向图,其边的个数至少为【n】
n(n-1)
注:环 - 【2009年统考真题】下列关于无向连通图特性的叙述中正确的是【A】
D
Ⅰ. 所有顶点的度之和为偶数
Ⅱ. 边数大于顶点个数减一
Ⅲ. 至少有一个顶点的度为1.环
A 只有Ⅰ
D Ⅰ和Ⅲ - 对一个有
n
n
n 个顶点
e
e
e 条边的图采用邻接表表示时,进行DFS遍历的时间复杂度为
O
(
n
+
e
)
O(n+e)
O(n+e),空间复杂度为【
O
(
n
)
O(n)
O(n)】
O(e)
;进行BFS遍历的时间复杂度为 O ( n + e ) O(n+e) O(n+e),空间复杂度为【 O ( n ) O(n) O(n)】O(e)
- 下面的方法可以判断出一个有向图是否有环(回路)
深度优先遍历√
拓扑排序√
求最短路径×(带回路也可以求最短路径
求关键路径 - 若有向无环图的拓扑序列唯一,则可以唯一确定该图 ×
- 下列关于关键路径的说法中,正确的是:
在AOE网中,关键路径上活动的时间延长多少,整个工程的时间也就随之延长多少
缩短所有关键路径上共有的任意一个关键活动的持续时间可缩短关键路径长度
第七章
- 折半查找过程所对应的判定树是一棵 【平衡二叉树】
- 对表长为 n n n 的有序表进行折半查找,其判定树的高度为【 ⌈ l o g 2 ( n + 1 ) ⌉ \lceil log_2(n+1) \rceil ⌈log2(n+1)⌉】
- 折半查找和二叉排序树的时间性能【有时不相同】
- 下列二叉树中可能成为折半查找判定树的是【A】
B
- 对于二叉排序树,下面的说法中,【C】是正确的
C 用逐点插入法构造二叉排序树,若先后插入的关键字是有序的,二叉排序树的深度最大
D 在二叉排序树中进行查找,关键字的比较次数不超过结点数的1/2 - 在含有 n 个结点的二叉排序树中查找某个关键字的结点时,最多进行 【n】次比较
- 含有20个结点的平衡二叉树的最大深度是 6
注: n 0 = 0 , n 1 = 1 , n 2 = 2 , n h = n h − 1 + n h − 2 + 1 n_0=0,n_1=1,n_2=2,n_h=n_{h-1}+n_{h-2}+1 n0=0,n1=1,n2=2,nh=nh−1+nh−2+1 - 下列关于红黑树的说法中,不正确的是【D】
A 一棵含有 n 个结点的红黑树的高度至多为 2 l o g 2 ( n + 1 ) 2log_2(n+1) 2log2(n+1)
B 如果一个节点是红色的,则它的父节点和孩子结点都是黑色的
C 从一个结点到其子孙结点的所有路径上包含相同数量的黑色结点
D 红黑树的查询效率一般要优于含有相同数量的结点的AVL树 × - 下列关于红黑树和AVL树的描述中,不正确的是【C】
A 两者都属于自平衡的二叉树
B 两者插入、查找、删除的时间复杂度一样
C 红黑树插入和删除过程至多有2次旋转操作 注:爷结点向上调整
D 红黑树的任意节点的左右子树高度之差不超过2倍 - 下列关于红黑树的说法中,正确的是【B】
A 红黑树是一种特殊的平衡二叉树
B 如果红黑树的所有结点都是黑色的,那么他一定是一个满二叉树
C 红黑树的任何一个分支节点都有两个非空孩子节点
D 红黑树的子树也一定是红黑树 - 【2019年统考真题】在任意一棵非空平衡二叉树(AVL树)
T
1
T_1
T1 中,删除某结点
v
v
v 之后形成的平衡二叉树
T
2
T_2
T2,再将
v
v
v 插入
T
2
T_2
T2 形成平衡二叉树
T
3
T_3
T3。下列叙述中正确的是
A 若 v v v 是 T 1 T_1 T1 的叶结点,则 T 1 T_1 T1 和 T 3 T_3 T3 可能不相同 √
B 若 v v v 不是 T 1 T_1 T1 的叶结点,则 T 1 T_1 T1 和 T 3 T_3 T3 一定不相同 ×
C 若 v v v 不是 T 1 T_1 T1 的叶结点,则 T 1 T_1 T1 和 T 3 T_3 T3 一定相同 × 要再次调整
- AVL树和红黑树的插入
- 含有
n
n
n个非叶结点的 m 阶B树中至少包含 【】个关键字
1 + ( n − 1 ) ( ⌈ m / 2 ⌉ − 1 ) 1+(n-1)(\lceil m/2 \rceil-1) 1+(n−1)(⌈m/2⌉−1) - 在一棵 m 阶B树中做插入操作前,若一个节点中的关键字个数等于 【m-1】,则必须分裂成两个结点;向一棵 m 阶B树做删除操作前,若一个结点中的关键字个数等于【 ⌈ m / 2 ⌉ − 1 \lceil m/2\rceil-1 ⌈m/2⌉−1】则可能需要同他的左右兄弟合并成一个结点
- 在开放定址法中散列到同一个地址而引起的堆积问题是由于【同义词之间或非同义词之间发生冲突】
同义词:发生碰撞的关键字
第八章
- 下列关于排序的叙述中,正确的是 【B】
D
A 稳定的排序方法优于不稳定的排序方法
B 对同一线性表使用不同的排序方法进行排序,得到的结果可能不同
C 排序方法都是在顺序表上实现的,在链表上无法实现
D 在顺序表上实现的排序方法在链表上也可以实现 - 对任意7个关键字进行基于比较的排序,至少要进行【13】次关键字两两比较
对任意n个关键字排序的比较次数至少为 ⌈ l o g 2 ( n ! ) ⌉ \lceil log_2(n!)\rceil ⌈log2(n!)⌉ - 快速排序在 【D】情况下最不利于发挥其长处
D 要排序的数据已基本有序 - 对下列关键字序列用快速排序进行排序时,速度最快的情形是【A】
C
,速度最慢的情形是【D】
A 21 25 5 17 9 23 30
B 25 23 30 17 21 5 9
C 21 9 17 30 25 23 5
D 5 9 17 21 23 25 30
注:枢轴值均分区间时最快;错误思想,仅仅手动看多少次完成是不合适的,即使肉眼(手动)已经有序,但是仍然要递归下去的,计算机不知道的 - 【2019年统考真题】对尚未确定最终位置的所有元素进行一遍处理成为一趟。下列序列中不可能是快速排序第二趟结果的是
D 5 2 12 28 16 32 72 60
如图所示的第二趟,第一趟确定了一个中间位置的,下一趟递归下去,将会产生两个在最终位置的 - 已知小根堆为 8,15,10,21,34,16,12,删除关键字8之后需要重新建堆,在此过程中关键字之间的比较次数是【3】
4
- 【2021年统考真题】将关键字6,9,1,5,8,4,7,依次插入到初始为空的大根堆H中,得到的 H是【B】
C
B 9 8 7 5 6 1 4
C 9 8 7 5 6 4 1 - 【2013年统考真题】对给定的关键字序列 110 119 007 911 114 120 122 进行基数排序,第2躺分配收集后得到的关键字序列是【C】
A
A 007 110 119 114 911 120 122
C 007 110 911 114 119 120 122
注:先个位再十位 - 若序列的原始状态为 1 2 3 4 5 10 6 7 8 9,要想使得排序过程中的元素比较次数最少,则应该采用
【A】D
A 插入排序
D 冒泡排序 - 一般情况下,以下查找效率最低的数据结构是【C】
A
A 有序顺序表
B 二叉排序树
C 堆
D 平衡二叉树
注:堆是用于排序的,查找时它是无序的 - 置换选择排序的作用是【A】
B
A 用于生成外部排序的初始归并段
B 完成将一个磁盘文件排序成有序文件的有效的外部排序算法 - 在做m路平衡归并排序的而过程中,为实现输入/内部归并/输出的并行处理,需要设置【2*m】个输入缓冲区和【2】个输出缓冲区
- 设有5个初始归并段,每个归并段有20个记录,采用5路平衡归并排序,若不采用败者树,使用传统的顺序选出最小记录(简单选择排序)的方法,总的比较次数为【396】;若采用败者树最小的方法,总的比较次数约为【300】
注:
①:不采用败者树,在5个记录中选出最小的需要做4次比较,共有100个记录,需要做99次选择最小记录的操作,所以4*99=396
②:采用败者树,5路归并意味着败者树的外结点有5个,败者树的高度为 ⌈ l o g 2 5 = 3 ⌈ \lceil log_2 5 =3 \lceil ⌈log25=3⌈
每次在参加比较的记录中选择一个最小的记录,比较次数不超过h,共100个记录,需要的比较次数不超过300.
虚段推导关键公式
n
0
=
n
k
(
k
−
1
)
+
1
n_0=n_k(k-1)+1
n0=nk(k−1)+1
k叉哈夫曼树