构造哈希表,并查询关键字K(整数)在哈希表中的结果:查询成功,返回K在哈希表中的位置, 否则返回“fail”,并输出查找成功或失败时的比较次数 设定哈希函数为:H(key)=key mod 13 哈希表长度m为16,下标取值(0、1......15) 线性探测方法处理冲突:Hi=(H(key)+di) MOD m 【输入形式】 先从标准输入读取整数的个数,然后从下一行开始输入各个整数,整数之间以一个空格分隔。第三行输入查询关键字K 【样例输入1】 12 19 14 23 01 68 20 84 27 55 11 10 79 55 【样例1输出】 5 3 【样例1说明】 原查找表共12个元素,第二行依次输入元素值19 14 23 01 68 20 84 27 55 11 10 79 ,需利用哈希表查找关键字55。 查询结果:55在哈希表位置5,共比较3次查询成功。 【样例输入2】 12 19 14 23 01 68 20 84 27 55 11 10 79 15 【样例2输出】 fail 12 【样例2说明】 原查找表共12个元素,第二行依次输入元素值19 14 23 01 68 20 84 27 55 11 10 79 ,需利用哈希表查找关键字15。 查询结果:查询失败,共比较12次获取查询结果。
时间: 2024-02-19 17:58:48 浏览: 100
以下是Python的代码实现:
```python
m = 16
hash_table = [None] * m
# 哈希函数
def H(key):
return key % 13
# 插入元素
def insert(key):
i = H(key)
j = 0
while j < m:
if hash_table[i] is None:
hash_table[i] = key
return
j += 1
i = (i + 1) % m
# 查找元素
def search(key):
i = H(key)
j = 0
while j < m:
if hash_table[i] == key:
return i, j+1 # 返回位置和比较次数
elif hash_table[i] is None:
return "fail", j+1
j += 1
i = (i + 1) % m
return "fail", j+1
# 读取输入
n = int(input())
for i in range(n):
key = int(input())
insert(key)
k = int(input())
result = search(k)
if result[0] == "fail":
print("fail", result[1])
else:
print(result[0], result[1])
```
解释一下代码的思路:
1. 首先定义哈希表的长度和一个数组来存储哈希表。
2. 定义哈希函数,用于将关键字映射到哈希表的下标。
3. 定义插入函数,使用线性探测法来处理哈希冲突,将元素插入哈希表中。
4. 定义查找函数,也使用线性探测法来处理哈希冲突,查找哈希表中是否存在关键字,返回位置和比较次数。
5. 读取输入,先读取整数的个数,然后再读取每个整数插入哈希表中,最后读取查询关键字。
6. 调用查找函数,输出结果。
注意,当哈希表已满时,插入操作会失败,但本题没有考虑这种情况。
阅读全文