1.最坏情况下 insert sort, quick sort ,merge sort 的复杂度分别是多少?
A. O(n*n),O(nlogn),O(n*n)
B. O(n*n),O(n*n),O(nlogn)
C. O(n*n),O(nlogn),O(nlogn)
D. O(nlogn),O(nlogn),O(nlogn)
答案:B
【解析】:
1:简单选择 最好时间 O(n^2) 平均时间O(n^2) 最坏时间 O(n^2)
2:直接插入 最好时间 O(n) 平均时间O(n^2) 最坏时间 O(n^2)
3:冒泡排序 最好时间 O(n) 平均时间O(n^2) 最坏时间 O(n^2)
4:希尔排序 最好时间 O(n) 平均时间O(logn) 最坏时间 O(n^s) 1<s<2
5:快速排序 最好时间 O(nlogn) 平均时间O(nlogn) 最坏时间O(n^2)
6:堆排序 最好时间 O(nlogn) 平均时间O(nlogn) 最坏时间O(nlogn)
7:归并排序 最好时间 O(nlogn) 平均时间O(nlogn) 最坏时间O(nlogn)
2.三个结点可以构成多少种二叉树( )
A、5
B、6
C、7
D、4
答案:A
【解析】:3个结点的二叉树有5种形态:两层树:根左右;三层树: 根左(第二层)左(第三层)、根左(第二层)右(第三层)、根右(第二层)左(第三层)、根右(第二层)右(第三层)。
3.下列排序算法中,其中( )是稳定的
A、堆排序,冒泡排序
B、快速排序,堆排序
C、直接选择排序,希尔排序
D、归并排序,冒泡排序
答案:D
【解析】假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。归并排序,冒泡排序,直接插入排序是稳定的。
4.3个不同的元素依次进栈,能得到( )种不同的出栈序列
A、4 B、5 C、6 D、7
答案:B
出栈序列有:123,213,321,231,132
5.下面序列哪个不可能是二叉搜索时的后序遍历结果?
A. 1,2,3,4,5
B. 3,5,1,4,2
C. 1,2,5,4,3
D. 5,4,3,2,1
答案:B
【解析】二叉搜索树,用于搜索,因此 内部节点没有重复的元素 。另外, 满足二叉树的性质,左子树都比自己小,右子树都比自己大。 那么 可想而知,如果按照后序遍历,先左后右最后自己的顺序来遍历树,数组的最后一个元素肯定是自己(父节点),然后剩余的部分分成两个部分,第一部分都比自己小(左子树部分),第二部分都比自己大(右子树部分),因此套用这个关系就可以循环检验出是否是二叉搜索树的后序遍历了。
6.对22 个记录的有序表作折半查找,当查找失败时,至少需要比较( )次关键字
A、3 B、4 C、5 D、6
答案:B
【解析】22 个记录的有序表,其折半查找的判定树深度为log2 (22) + 1=5 ,且该判定树不是满二叉树,即查找失败时至多比较5 次,至少比较4 次
7.假设利用数组a[n]顺序存储一个栈,用top表示栈顶指针,用top == -1 表示栈空,并已知栈未满,当元素x进栈时所执行的操作为( )
A、a[--top] = x;
B、a[top--] = x;
C、a[++top] = x;
D、a[top++] = x;
答案:C
【解析】top == -1 表示栈空,top = 0时,还没有存值,所以得出结论:先指针加1,再赋值,即C。
8.在一个有向图中,所有顶点的度数之和等于所有弧数的( )倍
A、3
B、2
C、1
D、1/2
答案:B
【解析】有向图的某个顶点v,把以v为终点的边的数目,称为v的入度;以v为始点的边的数目,称为v的出度;v的度则定义为该顶点的入度和出度之和。显然,在一个有向图中,所有顶点的度数之和等于所有弧数的2倍。
9.已知无向连通图 G 中各边的权值均为 1,下列算法中,一定能够求出图 G 中从某顶点到其余各个顶点最短路径的是( )
I.普利姆算法
II.克鲁斯卡尔算法
III.图的广度优先搜索
A、仅 I B、仅 III C、仅 II 和 I D、I,II,III
答案:B
【解析】无向连通图 G 中各边的权值均为 1 ,G 可以视为无权图,可以用广度优先搜索求单源最短路径,在求无权图的单源最短路径问题中,广度优先搜索比Dijkstra算法更加高效。III正确。I 和 II 是最小生成树算法,也可直接排除
10.修改递归方式实现的图的深度优先搜索(DFS)算法,将输出(访问)定点信息的语句移到退出递归前(即执行输出语句后立刻退出递归)。采用修改后的算法遍历有向无环图 G,若输出结果中包含 G 中的全部顶点, 则输出的顶点序列是 G 的:( )
A、拓扑有序序列
B、逆拓扑有序序列
C、广度优先搜索序列
D、深度优先搜索序列
答案:B
【解析】DFS 是一个递归算法,在遍历的过程中,先访问的点被压入栈底。拓扑有序是指如果点 U 到点 V 有一条弧,则在拓扑序列中 U 一定在 V 之前,深度优先算法搜索路径恰恰是一条弧,栈的输 出是从最后一个被访问点开始输出,最后一个输出的点是第一个被访问的点,所以是逆拓扑有序序列。
11.需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构为( )。
A、单链表 B、静态链表 C、顺序表 D、双链表
答案:B
【解析】静态链表的特点:不需要移动元素,只需要修改指针;需要一次性分配较大量空间,存储结构可以反应数据之间的逻辑关系。
12.若三叉树 T 中有 244 个结点(叶结点的高度为 1), 则 T 的高度至少是( )
A、8
B、7
C、6
D、5
答案:C
【解析】
13.在一棵具有 15 个关键字的 4 阶 B 树中,含关键字的结点个数最多是()
A.5
B.6
C.10
D.15
答案:D
【解析】关键字数量不变,要求结点数量最多,那么即每个结点中含关键字的数量最少。根 据 4 阶 B 树的定义,根结点最少含 1 个关键字,非根结点中最少含(4/2)-1=1 个关键字,所 以每个结点中,关键字数量最少都为 1 个,即每个结点都有 2 个分支,类似与排序二叉树, 而 15 个结点正好可以构造一个 4 层的 4 阶 B 树,使得叶子结点全在第四层,符合 B 树定义,因此选 D。
14.一个具有8个顶点的连通无向图(没有自环),最多有()条边
A. 28
B. 7
C. 26
D. 8
答案:A
【解析】无向连通图最少边为n-1,最多边为n*(n-1)/2
15.100个元素的排序数组分别进行二分查找和顺序查找,在查找失败的情况下,( )的比较次数较多
A、二分查找
B、顺序查找
C、一样多
D、不一定
答案:B
【解析】100个元素的排序数组分别进行二分查找和顺序查找,在查找失败的情况下,顺序查找最多比较100次,二分查找最多比较7次。
16. 现有长度为 5,初始为空的散列表 HT,散列表函数 H(K)=(k+4)%5 用线性探查再散列法解决冲突。若将关键字序列 2022,12,25 依次插入 HT 中,然后删除关键字 25,则 HT 中查找失败的平均查找长度( )。
A、1
B、1.6
C、1.8
D、2.2
答案:C
【解析】
17. 设F 是一个森林, B 是由F 变换得的二叉树。若F 中有n 个非终端结点,则B 中右指针域为空的结点有( )个
A、n- 1 B、n C、n + 1 D、n + 2
答案:C
【解析】森林转换为二叉树,"兄弟相连、长兄为父、孩子靠左、头根为根 ",F有n个非终端节点,所以转换为二叉树后所有的空的右指针域就是n个根节点没有兄弟,根结点的右指针域也为空,二叉树中右指针域为空的节点有(n+1)个。
18.对于无向图G=(V,E),下列选项中, 正确的是( )
A、当 IVl >IEI时, G 一定是连通的
B、当 IVl < IEI时, G 一定是连通的
C、当 IVl = IEl-1 时,G 一定是不连通的
D、当 IVl > IEl+1 时,G 一定是不连通的
答案:D
【解析】
19.以下属于逻辑结构的是( )
A、顺序表 B、哈希表 C、有序表 D、单链表
答案:C
【解析】有序表是表中元素有顺序,并没有具体要求如何存取,所以是逻辑结构
20. 在有 6 个字符组成的字符集 S 中,各个字符出现的频次分别为 3,4,5,6,8,10,为 S 构造的哈夫曼树的加权平均长度为( )
A、2.4
B、2.5
C、2.67
D、2.75
答案:B
【解析】构建哈夫曼树:
每个关键字的查找长度为:
注意,题目要求求加权平均长度,这里的权重就是频次。
加权平均长度为 (3×3+3×4+3×5+3×6+2×8+2×10)/(3+4+5+6+8+10)=2.5 。
如果不考虑权重,会错误计算为 (3+3+3+3+2+2)/6≈2.67 ,从而误选C。
本题选B。
21.在二路归并排序中归并的趟数是______。
A. n
B. log2n
C. log2n+1
D. n2
答案:B
22.n 个顶点,m 条边的全连通图,至少去掉几条边才能构成一棵树?
A. m-n
B. m-n+1
C. m-n-1
D. m-2n
答案:B
【解析】n个顶点的树一定有n-1条边,所以需要去掉m-(n-1)=m-n+1条边
23.广义表(a,b,c)的表尾是( )
A. b,c B. (b,c) C. c D. (c)
答案:B
24.在一个具有n个顶点的有向图中,构成强连通图时至少有______ 条边。
A. n
B. n +1
C. n - 1
D. n/2
答案:A
【解析】边数最少的有向强连通图是一个环,其边数=n
25.设串长为n,模式串长为m,则KMP算法所需的附加空间为( )
A. O(m) B. O(n) C. O(m*n) D. O(nlog2m)
答案:A
26.已知字符串S为“abaabaabacacaabaabcc”,模式串t为“abaabc”。采用KMP算法进行匹配,第一次出现“失配”(s[i] ≠ t[j])时,i = j = 5,则下次开始匹配时,i和j的值分别是( )
A. i = 1, j = 0
B. i = 5, j = 0
C. i = 5, j = 2
D. i = 6, j = 2
答案:C
【解析】第一次出现“失配”(s[i] ≠ t[j])时,i = j = 5,隐藏含义是主串和模式串下标都从0开始,这个条件非常重要。
方法一:计算 next 数组后模拟
第一步:计算出模式串的next数组。
本人自编口诀优化前的next数组:第一格负一,第二格零,前缀等于后缀取最长。
这里由于主串和模式串下标都从0开始,没必要用优化后的next数组求解。优化后的next数组增加的1和下标都从0开始相比下标都从1开始减少的1正好相抵。
第二步:遍历主串对模式串进行匹配。
第一次匹配在模式串下标为5的位置出现失配,找到之前匹配的子串为abaab,最长相同前缀与后缀为ab,将前缀的ab移动到后缀ab的位置。
或者查表next数组失配字符c,其下标为5,其next值为next[5] = 2,已匹配字符数为5,移动位数 = 已匹配字符数 - 失配位置对应的匹配值 = 5 - 2 = 3。模式串向后移动3格,从失配位置开始重新进行匹配,此时 i = 5, j = 2。
或者查表next数组失配字符c,其下标为5,其next值为next[5] = 2,j指针直接跳转到模式串下标为2的位置,从失配位置开始重新进行匹配,此时 i = 5, j = 2。
本题选C。
方法三:贪心
贪心找到最多匹配的情况,同样画出上图。虽然这个方法不严谨,好在本题足够简单,从失配位置开始重新进行匹配,很容易看到i = 5, j = 2。
本题选C。
补充本人对本题完整KMP匹配过程的模拟。
27.折半搜索与二叉排序树的时间性能( )
A、相同
B、完全不同
C、有时不相同
D、数量级都是O(log 2n)
答案:C
【解析】二叉排序树不一定是平衡树,它是只要求了左右子树与根结点存在大小关系,但是对左右子树之间没有层次差异的约束,因此通过二叉排序树进行查找不一定能够满足logn的。
只有是一棵平衡的二叉排序树时,其查找时间性能才和折半查找类似。
28.现有一棵无重复关键字的平衡二叉树(AVL树),对其进行中序遍历可得到一个降序序列。下列关于该平衡二叉树的叙述中,正确的是( )
A. 根结点的度一定为2
B. 树中最小元素一定是叶结点
C. 最后插入的元素一定是叶结点
D. 树中最大元素一定是无左子树
答案:D
【解析】A选项中,根结点的度不一定为2,A错误。
B选项中,一棵平衡二叉树是一棵二叉搜索树,由于中序遍历可得到一个降序序列,树中最小元素一定是最右结点,即无右子树,但可能有左子树,所以不一定是叶结点,B错误。
C选项中,AVL树的插入分两步,第一步是按照二叉搜索树的规则插入元素,该元素此时是叶结点,第二步是调整二叉搜索树为AVL树,如果此时二叉搜索树不平衡,需要进行旋转,旋转后该元素所在结点不一定是叶结点,C错误。
D正确。故本题选D。
29.采用共享栈的好处是( )
A、减少存取时间,降低发生上溢的可能
B、节省存储空间,降低发生上溢的可能
C、减少存取时间,降低发生下溢的可能
D、节省存储空间,降低发生下溢的可能
答案:B
【解析】与普通顺序栈相比,他们的存取时间都是O(1),随机存取,好处是节省了存储空间,两个站一起使用空间,利用率更高;因为一次可以申请更大空间,所以上溢的可能性降低,下溢肯定是不变的,没元素了还出元素,就是下溢。
30.已知森林 F 及与之对应的二叉树 T,若 F 的先根遍历序列是 a,b,c,d,e,f,后根遍历序列是 b,a,d,f,e,c 则 T 的后遍历序列是:( )
A、b,a,d,f,e,c
B、b,d,f,e,c,a
C、b,f,e,d,c,a
D、f,e,d,c,b,a
答案:C
【解析】森林的先根遍历对应它自己转化后二叉树的先序遍历,森林的后根遍历对应它自己转化后 二叉树的中序遍历,所以先根和后根可以唯一确定森林转化后的二叉树,如下:
后序遍历为:b,f,e,d,c,a
31.设有序顺序表中有 n 个数据元素,则利用二分查找法查找数据元素 X 的最多比较次数不超过( )。
(A) log2n+1 (B) log2n-1 (C) log2n (D) log2(n+1)
答案:A
32.引入二叉线索树的目的是( )
A、加快查找结点的前驱或后继的速度
B、为了能在二叉树中方便的进行插入与删除
C、为了能方便的找到双亲
D、使二叉树的遍历结果唯一
答案:A
【解析】以二叉链表作为存储结构时,只能得到节点的左右孩子信息,结点的任意序列中的前驱和后继信息只能在遍历的动态过程中才能得到,为了查找结点的前驱或后继,引入线索二叉树。
33.下列关于线性表,二叉平衡树,哈希表存储数据的优劣描述错误的是?
A. 哈希表是一个在时间和空间上做出权衡的经典例子。如果没有内存限制,那么可以直接将键作为数组的索引。那么所有的查找时间复杂度为O(1)
B. 线性表实现相对比较简单
C. 平衡二叉树的各项操作的时间复杂度为O(log(n))
D. 平衡二叉树的插入节点比较快
答案:D
【解析】哈希表是一个在时间和空间上做出权衡的经典例子。如果没有内存限制,那么可以直接将键作为数组的索引。那么所有的查找时间复杂度为O(1);如果没有时间限制,那么我们可以使用无序数组并进行顺序查找,这样只需要很少的内存。在平衡二叉树中插入结点要随时保证插入后整棵二叉树是平衡的,所以可能需要通过一次或多次树旋转来重新平衡这个树
34.一颗完全二叉树第六层有8个叶结点(根为第一层),则结点个数最多有()个
A. 39
B. 72
C. 104
D. 111
答案:D
【解析】二叉树第k层最多有2的(k-1)次方个节点
第六层最多有32个节点
第五层最多有16个节点
第四层最多有8个节点
第三层最多有4个节点
第二层最多有2个节点
第一层最多有1个节点
完全二叉树的叶节点只可能出现在后两层
如果完全二叉树有6层,则前5层是满二叉树,总节点数目为16+8+4+2+1+8=39
如果完全二叉树有7层,则前6层是满二叉树,
前六层总节点数目为32+16+8+4+2+1=63
第六层有8个叶子节点,则有32-8=24个非叶子节点
第七层最多有24*2个叶子节点
总节点数目为63+24*2=111
35.修改递归方式实现的图的深度优先搜索(DFS)算法,将输出(访问)定点信息的语句移到退出递归前(即执行输出语句后立刻退出递归)。采用修改后的算法遍历有向无环图 G,若输出结果中包含 G 中的全部顶点, 则输出的顶点序列是 G 的:( )
A、拓扑有序序列
B、逆拓扑有序序列
C、广度优先搜索序列
D、深度优先搜索序列
答案:B
【解析】DFS 是一个递归算法,在遍历的过程中,先访问的点被压入栈底。拓扑有序是指如果点 U 到点 V 有一条弧,则在拓扑序列中 U 一定在 V 之前,深度优先算法搜索路径恰恰是一条弧,栈的输 出是从最后一个被访问点开始输出,最后一个输出的点是第一个被访问的点,所以是逆拓扑有序序列。
36.在一棵深度为h的完全二叉树中,所含结点个数不大于( )
A、2^h
B、2^(h+1)
C、2^h -1
D、2^(h-1)
答案:C
【解析】在一棵深度为h的完全二叉树中,所含结点个数不大于2^h -1。回答此题可以用实例来验证,例如当h=2时,完全二叉树最多有3个结点。
37.在一株高度为 2 的 5 阶 B 树中,所含关键字的个数最少是()
A.5
B. 7
C. 8
D. 14
答案:A
【解析】一棵高度为 2 的 5 阶 B 树,根结点只有到达 5 个关键字的时候才能产生分裂,成为高度为 2 的 B 树。
38.下列关于非空 B 树的叙述中,正确的是( )
①插入操作可能增加树的高度
②删除操作一定会导致叶结点的变化
③查找某关键字一定是要查找到叶结点
④插入的新关键字最终位于叶结点中
A、仅 1
B、仅 12
C、仅 34
D、仅 124
答案:B
【解析】I. 插入操作可能会导致关键字上溢,关键字上溢到根结点,树的高度加一。I 正确。
II.如果删除的关键字位于叶结点:
在叶结点中删除该关键字,该叶结点一定发生变化。分析到这里,可以不用进行继续分析。继续分析简写如下,如果删除该结点后关键字个数 n≥⌈m/2⌉−1 ,没有后续操作,如果该结点删除关键字后关键字个数 n<⌈m/2⌉−1 ,需要从兄弟结点借一个关键字,又分兄弟够借和兄弟不够借两种情况,这里不进行继续分析。无论上述哪种情况,此时叶结点一定发生变化。
如果删除的关键字位于非叶结点:
用被删除关键字的后继关键字替换被删除关键字,该后继关键字为于被删除关键字的右子树的最下层最左边,即一定位于叶结点,该叶结点一定发生变化。分析到这里,可以不用进行继续分析。继续分析简写如下,如果该结点删除关键字后关键字个数 n≥⌈m/2⌉−1 ,没有后续操作,如果删除该结点后关键字个数 n<⌈m/2⌉−1 ,需要从兄弟结点借一个关键字,又分兄弟够借和兄弟不够借两种情况,这里不进行继续分析。此时叶结点一定发生变化。
综上,无论删除关键字是位于叶结点还是位于非叶结点,一定有叶结点发生变化。II 正确。
III. B树中所有结点均可以存储关键字,若查找的关键字位于非叶结点,则不可能查找到叶结点。III错误。
IV. 插入新的关键字,插入后进行调整,新插入的关键字不一定位于叶结点中。可以用依次将关键字5, 6, 9, 14, 8, 2, 12, 15, 13插入初始为空的4阶B树进行模拟,最后13位于非叶结点中。也就是插入关键字后若被插入关键字所在的结点需要进行调整(结点发生分裂),且被插入的关键字此时恰为该结点的第 ⌈m/2⌉ 个关键字,则该关键字会上溢到该结点的父结点,如此迭代,也就是在这种情况下被插入的关键字最终一定位于非叶结点中。
综上,I 和 II 正确。
本题选B。
39.设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是()
A. m - n
B. m - n - 1
C. n + 1
D. 条件不足,无法确定
答案:A
【解析】森林转二叉树的过程是这样的:
(1)把每棵树转换为二叉树。
(2)第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来。
所以转换后的二叉树的左子树节点的个数加根节点的个数就是第一棵树的节点个数,即二叉树总节点个数m减去根节点右子树节点个数n。
40.下列关于图的叙述中,正确的是()
Ⅰ. 回路是简单路径
Ⅱ.存储稀疏图,用邻接矩阵比邻接表更省空间
Ⅲ.若有向图中存在拓扑序列,则该图不存在回路
A.仅Ⅱ
B.仅Ⅰ、Ⅱ
C.仅Ⅲ
D.仅Ⅰ、Ⅲ
答案:C
【解析】Ⅰ.回路对应于路径,简单回路对应于简单路径;Ⅱ.刚好相反;Ⅲ.拓扑有序的必要条件。故选C。
41.最不合适做链式队列的链表是( )
A、只带队首指针的非循环双链表
B、只带队首指针的循环双链表
C、只带队尾指针的循环双链表
D、只带队尾指针的循环单链表
答案:A
【解析】A(1)复杂度高不适合(2)复杂度低单操作麻烦不适合
A:入队O(n),入队要去队尾;出队O(1)
B:入队O(1);出队O(1)
C:入队O(1);出队O(1)
D:入队O(1);出队O(1)
42.下列选项给出的是从根分别到达两个叶结点路径上的权值序列,能属于同一棵哈夫曼树的是( )
A. 24, 10, 5 和 24, 10, 7
B. 24, 10, 5 和 24, 12, 7
C. 24, 10, 10 和 24, 14, 11
D. 24, 10, 5 和 24, 14, 6
答案:D
【解析】哈夫曼树是构造哈夫曼编码过程的图形化展示,哈夫曼树有许多重要的性质,哈夫曼树是一棵完满二叉树,每个结点的度只能为 0 或 2。
我们先根据选项构造出对应的完满二叉树,再检查该完满二叉树是否为哈夫曼树。
为了更加贴近哈夫曼树:
任意一个结点的左孩子权值小于或等于右孩子权值。
一个非叶结点的权值等于其左孩子权值和右孩子权值之和。
选项A的根结点的左孩子10的左右孩子权值出现了两种情况,意味着这两条路径一定不会出现在同一棵哈夫曼树中。错误。
选项B的根结点24的左右孩子权值出现了两种情况,意味着这两条路径一定不会出现在同一棵哈夫曼树中。错误。
选项C虽然成功构造出了一棵完满二叉树,但这棵完满二叉树不是一棵哈夫曼树,错误原因有两点:
第一点:哈夫曼树中不会出现权值为 0 的结点,因为哈夫曼树对应哈夫曼编码,每个叶结点的权值表示词频或出现几率,权只为 0 表示该单词不存在,显然哈夫曼编码不可能对不存在的单词进行统计。也就是哈夫曼树中每个结点的权值为正数。
第二点:哈夫曼编码是一种贪心编码,每次选择词频最小的两个字符,我们假设 0 合法,我们用 0、 10、3 和 11 这四个关键字尝试还原这棵哈夫曼树,我们发现还原失败。其实也可直接观察,第一次选中 0 和 10,第二次选中 3 和 11,明显有第一次选中的 10 大于第二次选中的 3,不符合哈夫曼编码。也就是说,如果命题组加大难度,将选项C修改为 24, 10, 9 和 24, 14, 11,虽然没有违反第一点,但违反第二点,仍然错误。
选项D的这棵完满二叉树是一棵哈夫曼树,可以进行如下验证。
故选D。
43.解决hash冲突的方法描述错误的有?
A. 开放定址法解决冲突的做法是:当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定 的关键字,或者碰到一个开放的地址(即该地址单元为空)为止。
B. 拉链法解决冲突的做法是:将所有关键字为同义词的结点链接在同一个单链表中
C. 拉链法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短
D. 当结点规模较大时,开放定址法较为节省空间
答案:D
【解析】D与开放定址法相比,拉链法有如下几个优点:
(1)拉链法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短;
(2)由于拉链法中各链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情况;
(3)开放定址法为减少冲突,要求装填因子α较小,故当结点规模较大时会浪费很多空间。而拉链法中可取α≥1,且结点较大时,拉链法中增加的指针域可忽略不计,因此节省空间;
(4)在用拉链法构造的散列表中,删除结点的操作易于实现。只要简单地删去链表上相应的结点即可。而对开放地址法构造的散列表,删除结点不能简单地将被删结点的空间置为空,否则将截断在它之后填人散列表的同义词结点的查找路径。这是因为各种开放地址法中,空地址单元(即开放地址)都是查找失败的条件。因此在用开放地址法处理冲突的散列表上执行删除操作,只能在被删结点上做删除标记,而不能真正删除结点。
44.采用线性探查法解决冲突的哈希表中,引起的堆积现象的原因是______
A. 同义词之间发生冲突
B. 非同义词之间发生冲突
C. 同义词或非同义词之间发生冲突
D. 哈希表溢出
答案:B
45.对一待排序序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是()
A.排序的总趟数
B.元素的移动次数
C.使用辅助空间的数量
D.元素之间的比较次数
答案:D
【解析】折半插入排序与直接插入排序都是将待插入元素插入前面的有序子表,区别是:确定当前记录在前面有序子表中的位置时,直接插入排序是采用顺序查找法,而折半插入排序是采用折半查找法。排序的总趟数取决于元素个数 n,两者都是 n-1 趟。元素的移动次数都取决于初试序列,两者相同。使用辅助空间的数量也都是 O(1)。折半插入排序的比较次数与序列初态无关,为 O(nlog2n);而直接插入排序的比较次数与序列初态有关,为 O(n)~O(n2)。
46.下列不属于hash碰撞解决方法的是()
A. 线性探测
B. 单旋转法
C. 二次探测
D. 拉链法
E. 双重散列
F. 多重散列
答案:B
【解析】单旋转法为hash表的生成方法;
常见哈希冲突解决办法:
1.开放地址法 2.线性探测法 3.链地址法(拉链法) 4.二次探测法
5.伪随机探测法 6.再散列(双重散列,多重散列) 7.建立一个公共溢出区
单旋转法是建立散列函数的一种方法:将最后一位数,旋转放置到第一位;
常见的散列函数有:直接定址法,数字分析法,平法取中法,取余法,折叠法,随机法
47.设有 6 个结点的无向图,该图至少应有( )条边才能确保是一个连通图。
A.8
B.11
C.6
D.5
答案:B
【解析】这里的“确保”意思是,6个顶点不管怎么连(平行边除外),你是找不出非连通图的情况的,首先5个顶点的全连通图需要的边为n*(n-1)/2=10,再加一条边与另一个顶点相连接,总共11条边,不管你怎么连,都可以确保这个图是连通的(不存在平行边)。
48.一棵树的广义表表示为a(b(c), d(e(g(h)), f)),则该二叉树中度为1的结点数为( )
A、2
B、3
C、4
D、5
答案:B
【解析】二叉树中的度就是分支的数目。没有分叉的二叉树节点的度就是0度。如果一个节点只有一个分叉就是1度。两个分叉就是2度。该广义表转换为二叉树后,度为1的结点是b,e,g。
49.有一个100阶的三对角矩阵M,其原始mi,j(1<=i<=100,1<=j<=100)按行优先次序压缩存入下标从0开始的一维数组N中。元素m30,30在N中的下标是()
A.86 B.87
C.88 D.89
答案:B
【解析】
50.分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是( )
A、(100 , 80, 90 , 60, 120 , 110 , 130)
B、(100 , 120 , 110 , 130 , 80, 60 , 90)
C、(100 , 60, 80 , 90, 120 , 110 , 130)
D、(100 , 80 , 60, 90 , 120 , 130 , 110)
答案:C
【解析】A 、B、C、D 四个选项构造二叉排序树都以100 为根,易知A 、B、D 三个序列中100 的左孩子为80,如图1 ,而C 选项中100 的左孩子为60,如图2
51.已知程序如下:
int S(int n) {
return (n <= 0) ? 0 : S(n - 1) + n;
}
void main() {
cout << S(1);
}
程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息依次对应的是( )。
A. main()→S(1)→S(0)
B. S(0)→S(1)→main()
C. main()→S(0)→S(1)
D. S(1)→S(0)→main()
答案:A
【解析】调用函数入口为main(),main()入栈,接着调用S(1),S(1)入栈,S(1)需要递归调用S(0),S(0)入栈,题目要求“自栈底到栈顶保存的信息”,即main()→S(1)→S(0),如果是“自栈顶到栈底保存的信息”就要反过来。本题选A。
52.含有20个结点的AVL树的最大高度是______。
A.4
B.5
C.6
D.7
答案:C
53.常对数组进行两种基本操作是( )。
A. 建立和删除 B. 索引和修改 C. 查找和修改 D. 查找与索引
答案:C
54.下面说法中,错误的是( )
1、算法原地工作的含义是指不需要任何额外的辅助空间
2、在相同规模n下,复杂度为O(n)的算法在时间上总是优于复杂度为O(2^n)的算法
3、所谓时间复杂度,是指最坏情况下估算算法执行时间的一个上界
4、同一个算法,实现语言的级别越高,执行效率就越低
A. 1 B. 1、2 C. 1、4 D. 3
答案:A
【解析】
55.有 ABCDEF 六个城市,每一个城市都和其他所有城市直接相连,问从 A——B 有多少种连接方式,路径不允许经过某个城市两次
A. 78
B. 65
C. 43
D. 以上都错
答案:B
【解析】
按照途径中间城市的个数依此累加
6个城市,顶多4个中间城市,因为先经过A再经过B和先经过B再经过A是不一样的,所以用排列数
途径0个中间城市: A(0,4) = 1
途径1个中间城市: A(1,4) = 4
途径2个中间城市: A(2,4) = 12
途径3个中间城市: A(3,4) = 24
途径4个中间城市: A(4,4) = 24
总路径数为:1+4+12+24+24=65
56.在二叉排序树中插入一个结点最坏情况下的时间复杂度为( )。
(A) O(1)
(B) O(n)
(C) O(log2n)
(D) O(n^2)
答案:B
【解析】最差情况下是O(n) 如果是最一般最基础的二叉树的话, 因为深度不平衡,所以会发展成单链的形状,就是一条线 n个点那么深,如果是深度平衡的二叉树 o(logn)
57.将算术表达式“1+6/(8-5)*3”转换成后缀表达式,在求后缀表达式的过程中,当遇到'*'时,运算数栈(从栈顶到栈底次序)为______。
A. 8 6 1
B. 5 8 1
C. 3 2 1
D. 3 6 1
答案:C
【解析】
58.二叉排序树中的最小值在二叉排序树的何处?
A. 只能在根节点
B. 只能在叶子节点
C. 可能在叶子节点, 也可能在根节点,也可能在只有右孩子的父节点
D. 可以在任何节点
答案:C
【解析】
A :若根节点有左孩子,则必然根节点不是最小值;所以A错误
B :若根节点有右孩子,则必然根节点小于右孩子这个叶子结点,所以B错误
C:当根节点只有右孩子时,可能为根节点 即为只有右孩子的父节点;
当根孩子只有左孩子,可能为叶子结点
D;只需举出反类即可:不可能为具有右孩子的这个树的右孩子节点
59.若数据元素序列 11,12,13,7,8,9,23,4,5 是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是()。
A.起泡排序
B.插入排序
C.选择排序
D.二路归并排序
答案:B
【解析】对于起泡排序和选择排序而言,每一趟过后都能确定一个元素的最终位置,而由题目中所说,前两个元素和后两个元素均不是最小或最大的两个元素并按序排列。答案 D 中的二路归并排序,第一趟排序结束都可以得到若干个有序子序列,而此时的序列中并没有两两元素有序排列。插入排序在每趟排序结束后能保证前面的若干元素是有序的,而此时第二趟排序后,序列的前三个元素是有序的,符合其特点。
60.一棵高度为h、结点个数为n的m(m≥3)次树中,其分支数是______。
A. n*h
B. n+h
C. n-1
D. h-1
答案:C
【解析】·除根结点外,每一个结点头上都会连有一条线(即分支),因此分支数比结点数少一个,并且分支数与高度h无关
61.在无向图中定义顶点vi与vj之间的路径为从vi到vj的一个( )。
A. 顶点序列 B. 边序列 C. 权值总和 D. 边的条数
答案:A
62.下列给定的关键字输入序列中,不能生成如下二叉排序树的是:( )
A、4,5,2,1,3
B、4,5,1,2,3
C、4,2,5,3,1
D、4,2,1,3,5
答案:B
【解析】在 4,5,1,2,3 中由于 5先插入,所以 1 会成为 4 的左孩子,2 会成为 1 的右孩子,如下图:
63.设某无向图中有 n 个顶点 e 条边,则该无向图中所有顶点的入度之和为( )。
(A) n
(B) e
(C) 2n
(D) 2e
答案:D
64.下列更合适表示队列的链表结构是( )。
A、单向链表
B、单向循环链表
C、双向链表
D、双向循环链表
答案:D
【解析】本题没有说指针位置,考虑所有情况下复杂度最低、最简便的。使用单向循环链表,设尾指针,复杂度最低且最简便。
65.下列选项中,不可能是快速排序第2趟排序结果的是()
A.2,3,5,4,6,7,9
B.2,7,5,6,4,3,9
C.3,2,5,4,7,6,9
D.4,2,3,5,7,6,9
答案:C
【解析】快排的阶段性排序结果的特点是,第 i 趟完成时,会有 i 个以上的数出现在它最终将要出现的位置,即它左边的数都比它小,它右边的数都比它大。题目问第二趟排序的结果,即要找不存在 2 个这样的数的选项。A 选项中 2、3、6、7、9 均符合,所以 A 排除;B选项中,2、9 均符合,所以 B 排除;D 选项中 5、9 均符合,所以D选项排除;最后看C选项,只有9一个数符合,所以C不可能是快速排序第二趟的结果。
66.已知一棵 3 阶 B-树,如下图所示。删除关键字 78 得到一棵新 B-树,其最右叶结点中的关键字是()。
A.60
B.60, 62
C.62, 65
D.65
答案:D
【解析】对于上图所示的 3 阶 B-树,被删关键字 78 所在结点在删除前的关键字个数=1=(3/2)-1,且其左兄弟结点的关键字个数=2≥3/2,属于“兄弟够借”的情况,则需把该结点的左兄弟结点中最大的关键字上移到双亲结点中,同时把双亲结点中大于上移关键字的关键字下移到要删除关键字的结点中,这样就达到了新的平衡,如下图所示。
67.设数组Data[0..m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作的语句为( )。
A、front=front+1
B、front=(front+1)% m
C、rear=(rear+1)%m
D、front=(front+1)%(m+1)
答案:D
【解析】队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。出队操作的语句为front=(front+1)%(m+1)。
68.堆是一种( )排序。
A、插入 B、选择 C、交换 D、归并
答案:B
69.一个具有1025 个结点的二叉树的高h 为( ) 。
A、11
B、10
C、11 至1025 之间
D、10 至1024 之间
答案:C
【解析】若每层仅有一个结点,则树高h 为1025 ;且其最小树高为log 2 (1025) + 1=11 ,即h 在11 至1025 之间。
70.m行n列的稀疏矩阵采用十字链表表示时,其中循环单链表的个数为______。
A. m+1
B. n+1
C. m+n+1
D. MAX{m,n}+1
答案:C
71.假设我们用d=(a1,a2,….a5)表示无向无自环图G的5个顶点的度数,下面给出的哪组值是可能的
A. {3,4,4,3,1}
B. {4,2,2,1,1}
C. {3,3,3,2,2}
D. {3,4,3,2,1}
答案:B
【解析】因为是无向图,所有顶点度的和必须为偶数
72.下列关于栈的叙述中,错误的是( )。
(1)采用非递归方式重写递归程序时必须使用栈
(2)函数调用时,系统要用栈保存必要信息
(3)只要确定了入栈次序,即可确定出栈次序
(4)栈是一种受限的线性表,允许在其两端进行操作
A、仅(1)
B、仅(1)、(2)、(3)
C、仅(1)、(3)、(4)
D、仅(2)、(3)、(4)
答案:C
【解析】1)错误。阶乘,尾递归都能很好的转换为普通循环
(3)错误。出现顺序不能确定
(4)错误。只允许在一端进行操作
73.有关链栈的叙述中正确的是______。
A. 链栈在进栈操作时一般不需要考虑上溢出
B. 链栈在出栈操作时一般不需要考虑下溢出
C. 链栈和顺序栈相比的缺点是不能随机访问栈中元素
D. 以上都不对
答案:A
【解析】链栈特点是动态申请内存空间,只要内存空闲空间够,就可以一直申请下去,所以出现上溢的情况很少,这是它的优点。链栈是一种数据存储结构,可以通过单链表的方式来实现,使用链栈的优点在于它能够克服用数组实现的顺序栈空间利用率不高的特点,但是需要为每个栈元素分配额外的指针空间用来存放指针域。
74.
75.
76.
77.
78.
79.
80.
后续还会更新,欢迎大家提建议