Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
斗罗世界中的C语言与数据结构:第四章
上一章,我们讲到了夕羽颜一路闯到了史莱克学院的第四关,接下来是最后一关,这是最难的一关,夕羽颜发挥得怎么样呢?让我们拭目以待吧!
下面是第一题:
这道题目需要我们结合两个序列来绘树,首先看前序序列来确定第一个根节点。
然后因为前序遍历是BDGE而中序遍历是DGBE,所以我们能够得到左子树。而根据前序遍历CFH和中序遍历FHC我们能够得到右子树。
接下来是第二题,这道题比较有意思,夕羽颜一看就知道这道题目他之前听父亲讲述过...
第一题,答案是:
回答这个问题需要我们了解开放地址法:
它只用数组一种数据结构存储,继承了数组的优点,对CPU缓冲友好,易于序列化。但是对内存的利用率并不如链表法,且冲突的代价更高。当数据量比较小、装载因子小的时候,适合采用开放寻址法。这也是Java中的ThreadLocalMap使用开放寻址法解决散列冲突的原因。
题目中22之所以放在散列位置为1的地方是因为需要22乘3然后模13得到的值是1。
而接下来的41乘3等于123,123模12得到6,所以它的散列位置为6。
以此方法,53的散列位置为3,46的散列位置是8,30的散列位置是12,13的散列位置是0。
此时需要注意了,1乘3模13应该是3,但是散列位置3已经被53使用了,所以往后推一个散列位置,其散列位置为4,67也是如此,散列位置6已经被占用了,所以它只能去散列位置7,51乘3模13得到10,所以其散列位置为10.
回答第二问,需要我们了解什么是装填因子:
装填因子等于关键字个数/表长。
所以此处装填因子为9/13=0.69
回答第三问,需要我们知道什么是平均查找长度:
查找成功的平均查找长度为:散列表中所有元素的查找次数之和/元素个数。
而查找失败的平均查找长度为:散列函数对应所有地址元素的查找次数之和/散列值。
所以此处:
平均查找长度为 (1+1+1+1+1+2+2+1+1)/9=11/9=1.22
再接下来是第三题,是关于最小堆的,夕雨颜马上去查找了有关最小堆的情况...
最小堆其实就是一棵完全二叉树,非叶子结点的值小于或等于其左孩子结点和右孩子结点的值。
同样的,最大堆也是一棵完全二叉树,非叶子结点的值大于或等于其左孩子结点和右孩子结点的值。
第一问,就是要求会堆的调整。
我们需要找到最后一个结点462,与908进行比较,然后908与462进行位置交换。第二次调整,是现在数字462的节点数组下标小1的节点为61,61与275和653进行比较。然后是下一个位置也就是512与170和897进行比较,将170与512进行位置交换。然后就是下一个位置87了,将87与275和462进行比较,不进行互换。然后就是503与170和87进行比较了,503与87进行互换。
然后继续从最后一个元素开始,462与908进行比较...
最后建立上图的最小堆。
第二问看似很容易,其实我们一眼就能看出来,但是我们得模拟计算机的工作,夕羽颜这样是这样回答的...
我们需要交换908与61的位置,然后进行调整...
908与87和170进行比较,然后908与87交换位置,908再和275与462进行比较,908与275交换位置,908再和503和653进行比较,908与503交换位置,最终得到如下:
然后是本关最后一题出现了:
我们前面介绍了B树以及B+树,此处就简单介绍一下:
图片内容来源:B树B-树和B+树的总结 - 简书 www.jianshu.com/p/92d15df75…
这篇文章写得不错,可以作为补充阅读。
图片内容来源:B树B-树和B+树的总结 - 简书 www.jianshu.com/p/92d15df75…
这篇文章写得不错,可以作为补充阅读。