第8章 查找 习题参考答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

习题八 参考答案

一、选择题

1.对线性表进行二分查找时,要求线性表必须( B )

A.以顺序方式存储

B.以顺序方式存储,且结点按关键字值有序排列

C.以链接方式存储

D.以链接方式存储,且结点按关键字值有序排列

2. 用二分查找法查找具有n 个结点的顺序表时,查找每个结点的平均比较次数是( D )

A.O(n 2)

B.O(nlog 2n)

C.O(n)

D.O(log 2n)

3. 对长度为4的顺序表进行查找,若查找第一个记录的概率为1/24, 查找第二个记录的概

率为1/6, 查找第三个记录的概率为2/3, 查找第四个记录的概率为1/8,则查找任意一个记

录的平均查找长度为( A )

A.23/8

B.20/8

C.17/8

D.14/8

4. 若有一个长度为64的有序表,现用二分查找方法查找某一记录,则查找不成功,最多需

要比较( B )次。

A.9

B.7

C.5

D.3

5. 当采用分块查找时,数据的组织方式为( C )

A.数据必须有序

B.数据不必有序

C.数据分成若干块,每块内数据不必有序,但块间必须有序

D.数据分成若干块,每块内数据必须有序,但块间不必有序

6. 一棵深度为k 的平衡二叉树,其每个非终端结点的平衡因子均为0,则该平衡二叉树共

有( C )个结点。

A.2k-1-1

B.2k-1+1

C.2k -1

D.2k +1

7. 具有5层结点的平衡二叉树至少有( B )个结点。

A.10

B.12

C.15

D.17

8. 若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为( D )

A.顺序存储结构

B.链式存储结构

C.索引存储结构

D.散列存储结构

9. 以下有关m 阶B-树的叙述中,错误的是( B )。

A.根结点至多有m 棵子树

B.每个结点至少有⎥⎥

⎤⎢⎢⎡2m 棵子树 C.所有叶子结点都在同一层上 D.每个结点至多有m-1个关键字

10.哈希表的地址区间为0~17,哈希函数为h(key)=K%17。采用线性探测法处理冲突,并

将关键字序列{26,25,72,38,8,18,59}依次存储到哈希表中,则在哈希表中查找元素

59需要搜索的次数为( C )。

A.2

B.3

C.4

D.5

二、填空题

1.动态查找表和静态查找表的主要区别在于 动态查找表有插入和删除操作 。

2.假定待查找记录个数为n,则在等概率的情况下,顺序查找在查找成功情况下的平均查找

长度为 (n+1)/2 ;在查找失败情况下的平均查找长度为 n+1 。

3. 对线性表进行二分查找时,要求线性表必须以顺序方式存储,且数据有序 。

4. 分块查找分为两个阶段,分别是确定待查元素所在的块 和 在块内查找待查的元素。

5.哈希法存储中,冲突指的是不同关键字值对应到相同的存储地址。

6. 一棵二叉排序树用中序遍历输出的信息是 递增 序列。

7.深度为4的平衡二叉树中至少有 7 个结点,至多有 15 个结点。

8.引入B-树的根本原因是减少查找一个元素需要访问的外存的次数。

9.哈希法存储的基本思想是根据关键字来决定存储地址。

10.设计一个好的哈希函数,其函数值应该以同等概率取其值域的每个值。

三、算法设计题

1.基于SeqList类,设计带监视哨的顺序查找算法,要求把监视哨设置在n号单元。

参考答案:

public int seqSearchWithGuard(Comparable key) {

int i = length() - 1;

getRecord()[i].setKey(key); //哨兵设置在第n号单元

i = 0;

while ((getRecord()[i].getKey()).compareTo(key) != 0) {

i++;

}

if (i < length() - 1) {

return i;

} else {

return -1;

}

}

2.基于SeqList类,设计一个递归算法,实现二分查找。

参考答案:

public int binarySearchRecursively(int low, int high, Comparable key) {

int mid, result;

if (low <= high) {

mid = (low + high) / 2; //中间位置,当前比较元素位置

result = getRecord()[mid].getKey().compareTo(key);

if (result > 0) {

return binarySearchRecursively(low, mid - 1, key); //查找成功

} else if (result < 0) {

return binarySearchRecursively(mid + 1, high, key);

} else {

return mid;

}

}

return -1; //查找不成功

}

3.基于BSTree类,设计一个算法,判断所给的二叉树是否为二叉排序树。

参考答案:

public class Exercise8_3_3 extends BSTree {

boolean flag = true;

Comparable lastkey = new KeyType(0);

//判断二叉树T是否二叉排序树,是则返回true,否则返回false

相关文档
最新文档