通过给定的一组数据用除留余数进行存储,查找给定数据并输出该数据的地址。 约定:散列地址的长度=1000第一行 n,m。n表示存储数据的个数,m表示除数。 第二行:关键码。 第三行: x 查找的数据。一个整数 给定数据的地址, 查找失败 输出“-1”。 要求: 开辟数组Size>=100, m < n;发生冲突时,仅能使用线性探测。
时间: 2024-02-17 17:10:18 浏览: 112
这是一个散列表的问题,使用除留余数法进行散列,并且要使用线性探测处理冲突。具体方法是,对于给定的数据,先对散列表的长度1000取余,得到一个余数,再将余数作为该数据存储的散列地址。查找给定数据时,同样先对数据进行除留余数,得到其散列地址,然后在散列表中查找该地址存储的数据,如果不是要查找的数据,则向后探测直到找到要查找的数据或者遇到空位置为止。
以下是一个示例代码:
```python
n, m = map(int, input().split())
hash_table = [-1] * 100 # 创建一个长度为1000的散列表
data = list(map(int, input().split()))
for i in range(n):
addr = data[i] % m # 使用除留余数法计算散列地址
while hash_table[addr] != -1: # 处理冲突,使用线性探测
addr = (addr + 1) % 100
hash_table[addr] = data[i]
x = int(input())
addr = x % m
while hash_table[addr] != x and hash_table[addr] != -1:
addr = (addr + 1) % 100
if hash_table[addr] == x:
print(addr)
else:
print("-1")
```
在使用该散列表时,先输入存储数据的个数n和除数m,然后输入关键码,将数据插入散列表中。接着输入要查找的数据x,按照同样的方法计算散列地址,并使用线性探测查找数据。如果找到了要查找的数据,则输出其地址;否则输出"-1"表示查找失败。
阅读全文