严蔚敏++数据结构习题集答案(8)
(1) 不同。因为有序顺序表搜索到其关键码比要查找值大的对象时就停止搜索,报告失败信息,不必搜索到表尾;而无序顺序表必须搜索到表尾才能断定搜索失败。
(2) 相同。搜索到表中对象的关键码等于给定值时就停止搜索,报告成功信息。
(3) 不同。有序顺序表中关键码相等的对象相继排列在一起,只要搜索到第一个就可以连续搜索到其它关键码相同的对象。而无序顺序表必须搜索全部表中对象才能确定相同关键码的对象都找了出来,所需时间就不相同了。
前两问可做定量分析。第三问推导出的公式比较复杂,不再进一步讨论。
8-3 假定用一个循环链表来实现一个有序表,并让指针head指向具有最小关键码的结点。指针current初始时等于head,每次搜索后指向当前检索的结点,但如果搜索不成功则current重置为head。试编写一个函数search(head, current, key)实现这种搜索。当搜索成功时函数返回被检索的结点地址,若搜索不成功则函数返回空指针0。请说明如何保持指针current以减少搜索时的平均搜索长度。 【解答】 current 10 20 30 40 50 60 head
相应的搜索函数可以定义为链表及链表结点类的友元函数,直接使用链表及链表结点类的私有数据成员。
template
ListNode
if ( key < current ) { p = head; q = current; } else { p = current; q = head; }
while ( p != q && p->data < key ) p = p->link; if ( p->data == key ) { current = p; return p; } else { current = head; return NULL; } }
//循链搜索其值等于key的结点 //找到, 返回结点地址 //未找到, 返回空指针
//确定检测范围, 用p, q指示
8-4 考虑用双向链表来实现一个有序表,使得能在这个表中进行正向和反向搜索。若指针p总是指向最后成功搜索到的结点,搜索可以从p指示的结点出发沿任一方向进行。试根据这种情况编写一个函数search(head, p, key),检索具有关键码key的结点,并相应地修改p。最后请给出搜索成功和搜索不成功时的平均搜索长度。 【解答】
p
∧ 10 head 20 30 40 50 60 70 ∧
template
DblListNode
类的友元
//函数。若给定值key大于结点p中的数据, 从p向右正向搜索, 否则, 从p向左反向搜索。 DblListNode
if ( key < p->data ) { while ( q != NULL && q->data > key ) q = q-> lLink; } //反向搜索
else { while ( q != NULL && q->data < key ) q = q-> rLink; } //正向搜索 if ( q != NULL && q->data == key ) { p = q; return p; }
//搜索成功
else return NULL; }
?i?1n??1??(i?k?1)??(k?i?1)??n???n*(n?3)?i2?i?i*n??n?n?3?i2?i?i*nk?1k?i?1??2?2n 如果指针p处于第i个结点(i = 1, 2, ?, n),它左边有i-1个结点,右边有n-i个结点。找到左边第i-1号结点比较2次,找到第i-2号结点比较3次,?,找到第1号结点比较i次,一般地,找到左边第k个结点比较i-k+1次(k = 1, 2, ?, i-1)。找到右边第i+1号结点比较2次,找到第i+2号结点比较3次,?,找到第n号结点比较n-i+1次,一般地,找到右边第k个结点比较k-i+1次(k = i+1, i+2, ?, n)。因此,当指针处于第i个结点时的搜索
成功的平均数据比较次数为
2ASL?1n?n??n?3i?i?i*n?succ?n2?3n?1i?1??2?n???3n一般地,搜索成功的平均数据比较次数为
?i?1n???(i?k)?k?0?(k?i?1)??(n?1)???n*(n?3)?i2?i?i*n?1??(n?1)k?i??2?如果指针p处于第i个结点(i = 1, 2, ?, n),它左边有i个不成功的位置,右边有n-i+1个不
成功的位置。
ASL?1(n?1)2?n??n*(n?3)22?1??2nunsucci?0?2?i?i?i*n???7n?6n?1一般地,搜索不成功的平均数据比较次数为
8-5 在一棵表示有序集S的二叉搜索树中,任意一条从根到叶结点的路径将S分为3部分:在该路径左边结点中的元素组成的集合S1;在该路径上的结点中的元素组成的集合S2;在该路径右边结点中的元素组成的集合S3。S = S1 ? S2 ? S3。若对于任意的a ? S1, b ? S2, c ? S3, 是否总有a ? b ? c?为什么? 【解答】
答案是否定的。举个反例:看下图粗线所示的路径 45 15
25
65
35 50 70 S1 = { 15 }, S2 = { 25, 30, 35, 45 }, S3 = { 40, 50, 65, 70 }
40 30 c = 40 ? S3,b = 45 ? S2,b ? c 不成立。
8-6 设有一个输入数据的序列是 { 46, 25, 78, 62, 12, 37, 70, 29 }, 试画出从空树起,逐个输入各个数据而生成的二叉搜索树。
【解答】
46 46 46 46 46 46 25 25 78 25 78 25 78 25 78 空树 加46
加78 加25
62 12 62 12 37 62 加62 46 46 加12 加37
25 78 25 78 12 37 62 12 37 62 70 29 70
加29 加70
8-7 在二叉搜索树上删除一个有两个子女的结点时,可以采用以下三种方法:
(1) 用左子树TL上具有最大关键码的结点X顶替,再递归地删除X。
(2) 交替地用左子树TL上具有最大关键码的结点和右子树TR上具有最小关键码的结点顶替,再递归地删除适当的结点。
(3) 用左子树TL上具有最大关键码的结点或者用右子树TR上具有最小关键码的结点顶替,再递归地删除适当的结点。可随机选择其中一个方案。
试编写程序实现这三个删除方法,并用实例说明哪一个方法最易于达到平衡化。 【解答】
① 在被删结点有两个子女时用左子树TL中具最大关键码的结点顶替的算法:
template
BstNode
template
//进到ptr的右子树 //搜寻中序下最后一个结点 //用该结点数据代替根结点数据
//进到ptr的左子树
//用该结点数据代替根结点数据
while ( temp->rightChild != NULL ) temp = temp->rightChild; //搜寻中序下最后一个结点
② 在被删结点有两个子女时用右子树TR中具最小关键码的结点顶替的算法:
BstNode
while ( temp->leftChild != NULL ) temp = temp->leftChild;
(1) 用左子树TL上具有最大关键码 …… 此处隐藏:4499字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




