数据结构笔试选择题:题组1
题目(共8小题)
1.(单选)有以下关键字序列(21,40,52,45,29,12,02,66),H(K)=K%11。试在0~10的散列空地址空间中,用线性探测再散列方法处理冲突,则等概率下查找成功的平均查找长度为
A. 3/4 B. 2/3 C. 4/3 D. 3/2
2.(单选)一个树高为6(根节点高度为1)的平衡二叉树,节点数可能是
A. 32 B. 16 C. 128 D. 64
3.(单选)关键字序列是 {12, 11, 19, 23, 1, 6, 10},哈希函数是 H(key) = key MOD 11。用链地址法构造哈希表,哈希地址为 1 的链中有多少个记录?
A. 5 B. 7 C. 3 D. 4
4.(单选)以下程序是用辗转相除法来计算两个非负数之间的最大公约数:
long long gcd(long long x, long long y){if(y==0)return x;else return gcd(y, x%y);
}
我们假设x,y中最大的那个数的长度为n,基本运算时间复杂度是O(1),那么该程序的时间复杂度为
A. O(1) B. O(log n) C. O(n) D. O(n^2)
5.(多选)以下排序算法时间复杂度为 O(n log n) 的是
A. 快速排序 B. 冒泡排序 C. 插入排序 D. 堆排序
6.(多选)已知中序遍历的序列是abcdef,则高度最小的二叉树的叶子节点可能是
A. a, c, f B. a, c, e C. c, d, f D. a, d, f
7.(填空)输入序列为1,2,3,经过栈的作用后,可以得到( )种不同的输出序列。
8.(填空)若初始序列为gbfcdae,那么至少需要( )次两两交换,才能使该序列变为abcdefg。任给一个自由a-g这7个字母组成的排列,最坏的情况下需要至少( )次两两交换,才能使序列变为abcdefg。
解答
1.【答案】D
【解析】根据给定的关键字序列(21, 40, 52, 45, 29, 12, 02, 66)和哈希函数 H(K) = K % 11,使用线性探测再散列处理冲突,在0~10的散列地址空间中,计算等概率下查找成功的平均查找长度(ASL)。
插入过程模拟:
H(21) = 10 → 位置10插入21,比较1次
H(40) = 7 → 位置7插入40,比较1次
H(52) = 8 → 位置8插入52,比较1次
H(45) = 1 → 位置1插入45,比较1次
H(29) = 7 → 位置7有冲突,线性探测位置8、9,位置9插入29,比较3次
H(12) = 1 → 位置1有冲突,线性探测位置2,位置2插入12,比较2次
H(02) = 2 → 位置2有冲突,线性探测位置3,位置3插入02,比较2次
H(66) = 0 → 位置0插入66,比较1次
查找成功的比较次数:
查找21:比较1次
查找40:比较1次
查找52:比较1次
查找45:比较1次
查找29:比较3次
查找12:比较2次
查找02:比较2次
查找66:比较1次
总比较次数 = 1 + 1 + 1 + 1 + 3 + 2 + 2 + 1 = 12
关键字个数 = 8
平均查找长度(ASL) = 12 / 8 = 3/2
因此,正确答案是选项 D. 3/2。
2.【答案】A
【解析】题目是关于树高为6(根节点高度为1)的平衡二叉树的节点数。平衡二叉树(如AVL树)的节点数对于给定高度有一个范围。对于高度h,最小节点数由递推关系 N(h)=N(h−1)+N(h−2)+1决定,其中 N(1)=1, N(2)=2。计算高度6的最小节点数:
N(3)=N(2)+N(1)+1=2+1+1=4
N(4)=N(3)+N(2)+1=4+2+1=7
N(5)=N(4)+N(3)+1=7+4+1=12
N(6)=N(5)+N(4)+1=12+7+1=20
最大节点数对应于完全二叉树,节点数为 。对于高度6,最大节点数为
。
因此,高度为6的平衡二叉树节点数范围是20到63。所以,节点数可能是32,正确答案是A. 32。
3.【答案】C
【解析】根据给定的关键字序列 {12, 11, 19, 23, 1, 6, 10} 和哈希函数 H(key) = key MOD 11,使用链地址法构造哈希表时,需要计算每个关键字的哈希地址,并找出哈希地址为 1 的链中的记录数量。计算每个关键字的哈希地址:
H(12) = 12 MOD 11 = 1
H(11) = 11 MOD 11 = 0
H(19) = 19 MOD 11 = 8
H(23) = 23 MOD 11 = 1
H(1) = 1 MOD 11 = 1
H(6) = 6 MOD 11 = 6
H(10) = 10 MOD 11 = 10
哈希地址为 1 的关键字有:12、23、1,共 3 个记录。
因此,哈希地址为 1 的链中有 3 个记录,对应选项 C。
4.【答案】C
【解析】根据给定的代码和问题描述,程序使用辗转相除法(欧几里得算法)计算两个非负数的最大公约数。假设x和y中最大的数的长度为n(即位数),基本运算时间复杂度为O(1)。
辗转相除法的时间复杂度取决于递归调用的次数。在最坏情况下(如连续斐波那契数),递归次数为O(log min(x, y))。由于最大数的长度为n,即最大数N ≈ 10^n(或以2为底,但大O表示法中对数底数不影响复杂度级别),因此log min(x, y) ≤ log N = O(n)。这意味着递归次数与n成线性关系。
因此,该程序的时间复杂度为O(n)。
5.【答案】AD
【解析】根据排序算法的时间复杂度分析:
快速排序(A):平均时间复杂度为 O(n log n),符合条件。
堆排序(D):时间复杂度为 O(n log n),符合条件。
冒泡排序(B)和插入排序(C)的时间复杂度均为 O(n²),不符合条件。
因此,正确答案是 A 和 D。
6.【答案】ABD
【解析】根据中序遍历序列为abcdef,构建高度最小的二叉树(高度为3),可能的结构有两种情况:
根节点为c:左子树包含a和b,右子树包含d、e、f。右子树为平衡结构(根为e,左孩子d,右孩子f)。左子树有两种可能:
左子树根为a,右孩子b → 叶子节点为b、d、f。
左子树根为b,左孩子a → 叶子节点为a、d、f。
因此,叶子节点可能为{a, d, f}(对应选项D)。
根节点为d:左子树包含a、b、c,右子树包含e、f。左子树为平衡结构(根为b,左孩子a,右孩子c)。右子树有两种可能:
右子树根为e,右孩子f → 叶子节点为a、c、f(对应选项A)。
右子树根为f,左孩子e → 叶子节点为a、c、e(对应选项B)。
选项C(c, d, f)不可能出现,因为在任何高度最小的树结构中,c和d不能同时为叶子节点(根为c时d是叶子但c不是,根为d时c是叶子但d不是)。
因此,可能出现的叶子节点组合为选项A、B、D。
7.【答案】5
【解析】根据栈的后进先出(LIFO)特性,输入序列为1,2,3时,所有可能的输出序列可以通过枚举所有合法的入栈和出栈操作得到。可能的输出序列有5种:
1,2,3
1,3,2
2,1,3
2,3,1
3,2,1
因此,经过栈的作用后可以得到5种不同的输出序列。
8.【答案】5 6
【解析】对于初始序列 "gbfcdae",将其转换为 "abcdefg" 所需的最少两两交换次数可以通过计算排列的循环分解得出。当前序列对应的置换循环分解为两个循环:一个长度为6的循环 (1,7,5,4,3,6) 和一个长度为1的循环 (2)。因此,最少交换次数为 7 - 2 = 5。
对于任意一个由 a-g 这7个字母组成的排列,最坏情况下的最少两两交换次数发生在排列为一个单循环时,所需交换次数为 7 - 1 = 6。
因此,第一个空填 5,第二个空填 6。