给定N个整型关键字和素数P, 用除留余数法定义散列函数 H(Key) = Key % P, 构建一个散列表,将关键字依次插入到长度为P的散列表中,用线性探测法处理冲突,并输出各关键字在散列表中的位置。 要求在一行内每个整型关键字在散列表中的位置
时间: 2023-09-05 09:05:18 浏览: 116
### 回答1:
首先,构建一个长度为P的散列表,初始时所有位置都为空。
对于每个关键字Key,计算其散列值H(Key) = Key % P,然后从H(Key)开始向后线性探测,直到找到一个空位置,将Key插入进去。
如果该位置已经被占用了,就继续向后探测,直到找到一个空位置。
如果整个散列表都被探测过一遍,还是没有找到空位置,就说明散列表已经满了,无法再插入新的关键字。
最后输出每个关键字在散列表中的位置,注意处理冲突后的位置可能不是刚好等于H(Key),而是向后探测了若干次之后的位置。
下面是具体的实现代码:
### 回答2:
给定N个整型关键字和素数P,我们要用除留余数法定义散列函数 H(Key) = Key % P,构建一个长度为P的散列表,并将关键字依次插入散列表中,使用线性探测法处理冲突,并输出各关键字在散列表中的位置。
首先,我们创建一个长度为P的散列表,初始化所有位置为空。
然后,对于每个关键字,我们计算其散列值,即 Key % P,得到其在散列表中的初始位置 index。
如果该位置为空,则将关键字插入该位置,并输出 index。
如果该位置不为空,则循环遍历散列表,直到找到一个空位置,将关键字插入该位置,并输出对应的 index。
最后,将所有关键字的位置按顺序输出。
以下是一个示例:
假设给定关键字为 5、12、20、30,素数P为 7。
首先创建一个长度为7的散列表,初始所有位置为空。
关键字 5,计算散列值为 5 % 7 = 5,散列表中第5个位置为空,将关键字插入该位置,输出5。
关键字 12,计算散列值为 12 % 7 = 5,散列表中第5个位置不为空,继续循环查找下一个位置,找到第6个位置为空,将关键字插入该位置,输出6。
关键字 20,计算散列值为 20 % 7 = 6,散列表中第6个位置为空,将关键字插入该位置,输出6。
关键字 30,计算散列值为 30 % 7 = 2,散列表中第2个位置为空,将关键字插入该位置,输出2。
因此,关键字在散列表中的位置为 5、6、6、2。
### 回答3:
根据题目要求,给定N个整型关键字和素数P,我们需要构建一个长度为P的散列表,并将关键字依次插入,并用线性探测法解决冲突。
首先,我们定义散列函数H(Key) = Key % P,该散列函数将关键字Key映射到散列表中的位置。
接下来,我们创建一个长度为P的散列表,并初始化所有位置为空。
然后,依次将N个整型关键字插入散列表中。对于每个关键字,我们先计算其散列值,即使用散列函数H(Key)得到关键字应该插入的散列表位置。如果该位置为空,则将关键字直接插入该位置;如果该位置已经被占用,则根据线性探测法,向后依次探测下一个位置,直到找到一个空位置插入关键字。
最后,输出各关键字在散列表中的位置。遍历散列表,对于每个位置,若为空,则输出-1;若不为空,则输出该位置上存储的关键字。
举例说明:假设N=5,关键字为{12, 28, 19, 39, 8},素数P=7。
首先,创建长度为7的散列表,并初始化为-1:[-1, -1, -1, -1, -1, -1, -1]。
将关键字依次插入散列表中:
1. 关键字12的散列值为12 % 7 = 5,该位置为空,插入关键字12。散列表变为:[-1, -1, -1, -1, -1, 12, -1]。
2. 关键字28的散列值为28 % 7 = 0,该位置为空,插入关键字28。散列表变为:[28, -1, -1, -1, -1, 12, -1]。
3. 关键字19的散列值为19 % 7 = 5,该位置已被占用,向后探测下一个位置,发现位置6为空,插入关键字19。散列表变为:[28, -1, -1, -1, -1, 12, 19]。
4. 关键字39的散列值为39 % 7 = 4,该位置为空,插入关键字39。散列表变为:[28, -1, -1, -1, 39, 12, 19]。
5. 关键字8的散列值为8 % 7 = 1,该位置为空,插入关键字8。散列表变为:[28, 8, -1, -1, 39, 12, 19]。
最后,输出各关键字在散列表中的位置:28 8 -1 -1 39 12 19。
阅读全文