知识大全 第9章查找(一)习题练习答案
Posted 结点
篇首语:行动是知识最好的果实。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 第9章查找(一)习题练习答案相关的知识,希望对你有一定的参考价值。
对含有n个互不相同元素的集合 同时找最大元和最小元至少需进行多少次比较? 答 设变量max和min用于存放最大元和最小元(的位置) 第一次取两个元素进行比较 大的放入max 小的放入min 从第 次开始 每次取一个元素先和max比较 如果大于max则以它替换max 并结束本次比较 若小于max则再与min相比较 在最好的情况下 一路比较下去都不用和min相比较 所以这种情况下 至少要进行n 次比较就能找到最大元和最小元
若对具有n个元素的有序的顺序表和无序的顺序表分别进行顺序查找 试在下述两种情况下分别讨论两者在等概率时的平均查找长度 ( )查找不成功 即表中无关键字等于给定值K的记录 ( )查找成功 即表中有关键字等于给定值K的记录 答 查找不成功时 需进行n+ 次比较才能确定查找失败 因此平均查找长度为n+ 这时有序表和无序表是一样的 查找成功时 平均查找长度为(n+ )/ 有序表和无序表也是一样的 因为顺序查找与表的初始序列状态无关
画出对长度为 的有序的顺序表进行二分查找的判定树 并指出在等概率时查找成功的平均查找长度 以及查找失败时所需的最多的关键字比较次数 答 等概率情况下 查找成功的平均查找长度为 ASL=( + * + * + * + * )/ = 查找失败时 最多的关键字比较次树不超过判定树的深度 此处为
为什么有序的单链表不能进行折半查找?答 因为链表无法进行随机访问 如果要访问链表的中间结点 就必须先从头结点开始进行依次访问 这就要浪费很多时间 还不如进行顺序查找 而且 用链存储结构将无法判定二分的过程是否结束 因此无法用链表实现二分查找
设有序表为(a b c e f g i j k p q) 请分别画出对给定值b g和n进行折半查找的过程 解 ( )查找b的过程如下(其中方括号表示当前查找区间 圆括号表示当前比较的关键字) 下标 第一次比较 [a b c d e f (g) h i j k p q] 第二次比较 [a b (c) d e f] g h i j k p q 第三次比较 [a (b)]c d e f g h i j k p q 经过三次比较 查找成功 ( )g的查找过程如下 [a b c d e f (g) h i j k p q] 一次比较成功 ( )n的查找过程如下 下标 第一次比较 [a b c d e f (g) h i j k p q] 第二次比较 a b c d e f g [h i (j) k p q] 第三次比较 a b c d e f g h i j [k (p) q] 第四次比较 a b c d e f g h i j [k] p q] 经过四次比较 查找失败
将(for case while class protected virtual public private do template const if int)中的关键字依次插入初态为空的二叉排序树中 请画出所得到的树T 然后画出删去for之后的二叉排序树T 若再将for 插入T 中得到的二叉排序树T 是否与T相同?最后给出T 的先序 中序和后序序列 答 二叉排序树T如下图
删去for后的二叉排序树如下图
再插入结点for后的二叉排序树T
二叉排序树T 与T不同 T 的先序序列是 do case class const while protected private if for int virtual public template T 的中序序列是 case class const do for if int private protected public template virtual while T 的后序序列是 const class case for int if private template public virtual protected while do
对给定的关键字集合 以不同的次序插入初始为空的树中 是否有可能得到同一棵二叉排序树?答 有可能 如有两个序列 和 它们插入空树所得的二叉排序树是相同的
将二叉排序树T的先序序列中的关键字依次插入一空树中 所得和二叉排序树T 与T否相同?为什么?答 这两棵二叉树完全相同
设二叉排序树中关键字由 至 的整数构成 现要查找关键字为 的结点 下述关键字序列哪一个不可能是在二叉排序树上查找到的序列? (a) (b) ; (c) ; (d) 答 (c)是不可能查找到的序列 把这四个序列各插入到一个初始为空的二叉排序树中 结果可以发现 (c)序列所形成的不是一条路径 而是有分支的 可见它是不可能在查找过程中访问到的序列
设二叉排序树中关键字互不相同 则其中最小元必无左孩子 最大元必无右孩子 此命题是否正确?最小元和最大元一定是叶子吗?一个新结点总是插在二叉排序树的某叶子上吗? 答 此命题正确 假设最小元有左孩子 则根据二叉排序树性质 此左孩子应比最小元更小 如此一来就产生矛盾了 因此最小元不可能有左孩子 对于最大元也是这个道理 但最大元和最小元不一定是叶子 它也可以是根 内部结点(分支结点)等 这得根据插入结点时的次序而定 新结点总是作为叶子插入在二叉排序树中的
在一棵m阶的B 树中 当将一关键字插入某结点而引起该结点的分裂时 此结点原有多少个关键字?若删去某结点中的一个关键字 而导致结点合并时 该结点中原有几个关键字?答 在一棵m阶的B 树中 若由于一关键字的插入某结点而引起该结点的分裂时 则该结点原有m 个关键字 若删去某结点中一个关键字而导致结点合并时 该结点中原有┌m/ ┐ 个关键字
在一棵B 树中 空指针数总是比关键字数多一个 此说法是否正确?请问包含 个关键字的 阶B 树(即 树)最多有几个结点?最少有几个结点?画出这两种情况的B 树 答 这个说法是正确的 包含 个关键字的 阶B 树最多有 个结点 最少有 个结点
相关参考
对含有n个互不相同元素的集合同时找最大元和最小元至少需进行多少次比较? 若对具有n个元素的有序的顺序表和无序的顺序表分别进行顺序查找试在下述两种情况下分别讨论两者在等概率时的平均查找长度&n
设散列表长度为散列函数h(x)=x%给定的关键字序列为试画出分别用拉链法和线性探查法解决冲突时所构造的散列表并求出在等概率情况下这两种方法查找成功和失败时的平均查找长度请问装填因子的值是什么?&nbs
常见的文件组织方式有哪几种?各有何特点?文件上的操作有哪几种?如何评价文件组织的效率?答 常用的文件组织方式有顺序文件索引文件散列文件和多关键字文件 ●顺序文件的
试描述头指针头结点开始结点的区别并说明头指针和头结点的作用答 开始结点是指链表中的第一个结点也就是没有直接前趋的那个结点 链表的头指
将哨兵放在R[n]中被排序的记录放在R[n]中重写直接插入排序算法解 重写的算法如下 voidInsertSort(SeqListR) //对顺序表中记录
以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序 上述方法中哪些
请按行及按列优先顺序列出四维数组A***的所有元素在内存中的存储次序开始结点为a 解 按行优先的顺序排列时先变化右边的下标也就是右到左依次变化这个四维数组的排列是这样的(将这个排列分行写出
一基础知识题试描述头指针头结点开始结点的区别并说明头指针和头结点的作用何时选用顺序表何时选用链表作为线性表的存储结构为宜?在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因
将哨兵放在R[n]中被排序的记录放在R[n]中重写直接插入排序算法以单链表作为存储结构实现直接插入排序算法 设计一算法使得在尽可能少的时间内重排数组将所有取负值的关键字放在所有取非负值的关键
一基础知识题请按行及按列优先顺序列出四维数组A***的所有元素在内存中的存储次序开始结点为a 给出C语言的三维数组地址计算公式设有三对角矩阵An*n将其三条对角线上的元素逐行地存储到向量B[