以下关于数据结构的说法中,正确的是 【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)=
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
一棵有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)
对表长为
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】则可能需要同他的左右兄弟合并成一个结点