散列表的地址区间为0~15,散列函数为H(key)=key%13。设有一组关键字{19,01,23,14,55,20,84}, 采用线性探测法解决冲突,依次存放在散列表中。问: 1)元素84存放在散列表中的地址是多少? 2)搜索元素84需要的比较次数是多少?
时间: 2023-10-07 10:04:06 浏览: 177
详解散列表算法与其相关的C语言实现
好的,我来帮您解决这道题目。
根据题目所给条件,我们可以得到哈希函数:H(key) = key % 13,即key对13取模。
接下来,我们可以按照以下步骤构造哈希表:
1. 初始化一个长度为16的哈希表,全部元素设为-1,表示该槽位为空。
2. 对于关键字序列中的每一个元素,计算其哈希值,即H(key)。
3. 如果哈希表中该槽位为空,将该元素插入到该槽位中,否则进行线性探测,直到找到一个空的槽位。
4. 线性探测的方式为:从当前槽位开始,一直往后遍历哈希表,直到找到一个空的槽位或者遍历了整个哈希表。如果找到了空槽位,则插入该元素;如果遍历了整个哈希表,那么从头开始重新遍历,直到找到一个空的槽位为止。
根据上述步骤,我们可以得到完整的哈希表构造过程如下:
|索引|关键字|
|---|---|
|0|55|
|1|01|
|2|14|
|3|19|
|4|20|
|5|84|
|6|23|
|7|-1|
|8|-1|
|9|-1|
|10|-1|
|11|-1|
|12|-1|
|13|-1|
|14|-1|
|15|-1|
其中,-1表示空槽位。注意,这里我们采用了线性探测的方式解决冲突,因此有些元素并不是按照哈希函数计算出来的哈希值所对应的槽位存储的。例如,关键字19的哈希值为6,但是由于槽位6已经被关键字23占用了,因此它被插入到了槽位3中。
根据上述哈希表,我们可以回答以下问题:
1. 元素84存放在散列表中的地址是多少?
根据哈希函数H(key)=key%13,我们可以得到元素84的哈希值为H(84)=84%13=11。因此,元素84应该被插入到槽位11中。查看上述哈希表,我们可以发现,确实有一个元素84存储在了槽位5中。因此,元素84存放在散列表中的地址是5。
2. 搜索元素84需要的比较次数是多少?
我们可以按照以下步骤进行搜索:
1. 计算元素84的哈希值为11。
2. 查找槽位11中的元素,发现元素84与该元素匹配。
因此,搜索元素84需要进行1次比较。
希望这个例子能够帮助您更好地理解散列表的构造过程和搜索过程。
阅读全文