(3) 构造一个哈希表,哈希函数采用除留余数法,哈希冲突解决方法采用链地址法。设计一个测试程序进行测试。
时间: 2024-03-03 13:53:59 浏览: 87
下面是一个用除留余数法实现哈希表,采用链地址法解决哈希冲突的Python代码:
```python
class HashTable:
def __init__(self, size):
self.size = size
self.slot = [[] for _ in range(self.size)]
def hash_func(self, key):
return key % self.size
def put(self, key, value):
hash_value = self.hash_func(key)
self.slot[hash_value].append((key, value))
def get(self, key):
hash_value = self.hash_func(key)
for k, v in self.slot[hash_value]:
if k == key:
return v
raise KeyError(key)
# 测试程序
hash_table = HashTable(10)
hash_table.put(1, 'a')
hash_table.put(2, 'b')
hash_table.put(11, 'c')
hash_table.put(12, 'd')
print(hash_table.get(1)) # 输出: a
print(hash_table.get(2)) # 输出: b
print(hash_table.get(11)) # 输出: c
print(hash_table.get(12)) # 输出: d
```
上述代码中,HashTable类表示哈希表,其构造函数中初始化了一个指定大小的哈希表,采用除留余数法计算哈希值,使用链表存储哈希冲突的元素。put()方法用于向哈希表中添加元素,get()方法用于获取哈希表中指定键的值。
测试程序中,我们向哈希表中添加了4个元素,然后分别获取指定键的值,并打印输出。最终输出结果为:a, b, c, d。这说明哈希表的构造和操作都正确。
阅读全文