1、习题一、单项选择题1. 若查找每个元素的概率相等,则在长度为 n 的顺序表上查找任一元素的平均查找长度为( )。A. n B. n+1 C. (n-1)/2 D. (n+1)/22. 对于长度为 18 的顺序存储的有序表,若采用折半查找,则查找第 15 个元素的比较次数为( )。A. 3 B. 4 C. 5 D. 63. 从具有 n 个结点的二叉排序树中查找一个元素时,在平均情况下的时间复杂度大致为( )。A. O(n) B. O(1) C. O(log2n) D. O(n2)4. 从具有 n 个结点的二叉排序树中查找一个元素时,在最坏情况下的时间复杂度为( )。A. O(n) B. O(1)
2、 C. O(log2n) D. O(n2)5. 在一棵平衡二叉排序树中,每个结点的平衡因子的取值范围是( ) 。A. -11 B. -22 C. 12 D. 016. 若根据查找表(23,44,36, 48,52,73,64,58)建立哈希表,采用 h(K)=K%13 计算哈希地址,则元素 64 的哈希地址为( )。A. 4 B. 8 C. 12 D. 137. 若根据查找表(23,44,36,48,52,73,64,58)建立哈希表,采用 h(K)=K%7 计算哈希地址,则哈希地址等于 3 的元素个数( )。A. 1 B. 2 C. 3 D. 48. 若根据查找表建立长度为 m 的哈希表,采
3、用线性探测法处理冲突,假定对一个元素第一次计算的哈希地址为 d,则下一次的哈希地址为( )。A. d B. d+1 C. (d+1)/m D. (d+1)%m二、填空题1. 以顺序查找方法从长度为 n 的顺序表或单链表中查找一个元素时,平均查找长度为_,时间复杂度为_。2. 假定一个顺序表的长度为 40,并假定查找每个元素的概率都相同,则在查找成功情况下的平均查找长度_,在查找不成功情况下的平均查找长度_。3. 从有序表(12,18,30,43,56,78,82,95)中分别折半查找 43 和 56 元素时,其比较次数分别为_和_。4. 假定在索引查找中,查找表长度为 n,每个子表的长度相等,
4、设为 s,则进行成功查找的平均查找长度为_。5. 在一棵二叉排序树中,每个分支结点的左子树上所有结点的值一定_该结点的值,右子树上所有结点的值一定_该结点的值。6. 对一棵二叉排序树进行中序遍历时,得到的结点序列是一个_。7. 在一棵平衡二叉排序树中,每个结点的左子树高度与右子树高度之差的绝对值不超过_。8. 假定对线性表 (38,25,74,52,48)进行哈希存储,采用 H(K)=K % 7 作为哈希函数,采用线性探测法处理冲突,则平均查找长度为_。9. 一棵 5 阶 B-树中,除根结点外,每个结点的子树树目最少为_,最多为_。10. 高度为 k 的 m 阶 B-树至少有_个结点。三、应用
5、题1. 已知一个顺序存储的有序表为(15,26,34,39,45,56,58,63,74,76),试画出对应的折半查找判定树,求出其平均查找长度。2. 假定一个线性表为(38,52,25,74,68,16,30,54,90,72),画出按线性表中元素的次序生成的一棵二叉排序树,求出其平均查找长度。3. 假定一个待哈希存储的线性表为(32,75,29,63,48,94,25,46,18,70),哈希地址空间为 HT13,若采用除留余数法构造哈希函数和线性探测法处理冲突,试求出每一元素在哈希表中的初始哈希地址和最终哈希地址,画出最后得到的哈希表,求出平均查找长度。元素 32 75 29 63 48
6、 94 25 46 18 70初始哈希地址 最终哈希地址 0 1 2 3 4 5 6 7 8 9 10 11 12哈希表 4. 假定一个待哈希存储的线性表为(32,75,29,63,48,94,25,36,18,70,49,80),哈希地址空间为 HT12,若采用除留余数法构造哈希函数和链地址法处理冲突,试画出最后得到的哈希表,并求出平均查找长度。四、算法设计题1.试将折半查找的算法改写成递归算法。 2.设计算法判定给定二叉树是否为二叉排序树。习题参考答案一、单项选择题1. D 2. B 3. C 4. A 5. A 6. C 7. B 8. D 二、填空题1. (n+1)/2, O(n) 2
7、. 20.5, 413. 1,3 4. (n/s+s)/2+1 5. 小于,大于 6. 有序序列 7. 1 8. 2 9.3,5 10. kl lm32)/(1三、应用题1. 折半查找判定树如图所示,平均查找长度等于 1*1+2*2+4*3+3*4=29/10。图中的结点与有序表中元素的对应关系如下表所示。2. 二叉排序树如图所示,平均查找长度等于 1*1+2*2+3*3+2*4+2*5=32/10。3. H(K)=K % 13 平均查找长度为 14/10,其余解答如下。元素 32 75 29 63 48 94 25 46 18 70初始哈希地址 6 10 3 11 9 3 12 7 5 5最
8、终哈希地址 6 10 3 11 9 4 12 7 5 80 1 2 3 4 5 6 7 8 9 10 11 12哈希表 29 94 18 32 46 70 48 75 63 251 2 3 4 5 6 7 8 9 1015 26 34 39 45 56 58 63 74 76109456 7812338522516 743068 9054 724. H(K)=K % 11,哈希表如图所示,平均查找长度 17/12。四、算法设计题1. int bisearch (sqlist L, int low, int high , elemtype x ) if (lowhigh) reeturn( 0
9、);else mid=(low+high)/2;if (L.datamid= =x) return (mid);else if (L.datamidx) bisearch(L,low,mid-1,x);else bisearch(L,mid+1,high,x);/bisearch2. 分析:对二叉排序树来讲,其中序遍历序列为一个递增序列。因此,对给定二叉树进行中序遍历,如果始终能够保证前一个值比后一个值小,则说明该二叉树是二叉排序树。算法一:int bsbtr(BiTree T ) /predt 记录当前结点的前驱结点值,初值为-if (!T) return (1);else b1=bsbtr(TLchild);if (!b1| |(predt=Tdata) return (0);predt=Tdata;b2=bsbtr(Trchild);return (b2);/bsbtr算法二:(用中序递归遍历树算法, “访问 T”为将 T 进队列,遍历树后,对队列从 1 到 n检查是否升序)0