开放地址法的用法举例demo
时间: 2023-10-31 16:04:16 浏览: 84
探讨用举例法做线性代数试题中的选择题
好的,以下是一个简单的开放地址法哈希表的示例代码:
```python
class HashTable:
def __init__(self, size):
self.size = size
self.keys = [None] * self.size
self.values = [None] * self.size
def hash_function(self, key):
return key % self.size
def rehash(self, old_hash):
return (old_hash + 1) % self.size
def insert(self, key, value):
hash_value = self.hash_function(key)
if self.keys[hash_value] is None:
self.keys[hash_value] = key
self.values[hash_value] = value
else:
next_slot = self.rehash(hash_value)
while self.keys[next_slot] is not None and self.keys[next_slot] != key:
next_slot = self.rehash(next_slot)
if self.keys[next_slot] is None:
self.keys[next_slot] = key
self.values[next_slot] = value
else:
self.values[next_slot] = value
def get(self, key):
hash_value = self.hash_function(key)
start_slot = hash_value
value = None
stop = False
found = False
position = start_slot
while self.keys[position] is not None and not found and not stop:
if self.keys[position] == key:
found = True
value = self.values[position]
else:
position = self.rehash(position)
if position == start_slot:
stop = True
return value
```
在这个示例中,我们定义了一个 `HashTable` 类来实现哈希表。在 `__init__` 方法中,我们初始化了哈希表的大小,并创建了两个用于存储键和值的列表。`hash_function` 方法用于计算哈希值,`rehash` 方法用于解决哈希冲突。`insert` 方法用于向哈希表中插入键值对,如果该槽位已经被占用,则使用 `rehash` 方法查找下一个可用的槽位。`get` 方法用于根据键获取值,如果该键不存在,则返回 `None`。
下面是一个简单的使用示例:
```python
ht = HashTable(11)
ht.insert(11, "hello")
ht.insert(22, "world")
ht.insert(33, "goodbye")
ht.insert(44, "cruel")
ht.insert(55, "world")
print(ht.get(11)) # 输出 "hello"
print(ht.get(22)) # 输出 "world"
print(ht.get(33)) # 输出 "goodbye"
print(ht.get(44)) # 输出 "cruel"
print(ht.get(55)) # 输出 "world"
```
在这个示例中,我们创建了一个大小为 11 的哈希表,并向其中插入了 5 个键值对。然后,我们分别使用 `get` 方法获取这些键对应的值,并输出结果。
阅读全文