📅  最后修改于: 2023-12-03 14:51:20.285000             🧑  作者: Mango
散列是一种能够将数据映射到固定范围内的算法。在Python中,我们可以使用散列表(也称为哈希表)来实现散列。散列表允许快速插入、查找和删除数据。
链式哈希表是一种允许多个键映射到同一个散列槽的哈希表。在这个实现中,每个槽都链接到一个链表,每个键值对都插入链表中。
我们可以使用Python中的字典和列表来实现链式哈希表。
class ListNode:
def __init__(self, key, value):
self.key = key
self.value = value
self.next = None
class HashTable:
def __init__(self):
self.size = 1000
self.table = [None] * self.size
def hash(self, key):
hash_value = 0
for char in key:
hash_value += ord(char)
return hash_value % self.size
def put(self, key, value):
hash_key = self.hash(key)
if self.table[hash_key] is None:
self.table[hash_key] = ListNode(key, value)
else:
current_node = self.table[hash_key]
while current_node:
if current_node.key == key:
current_node.value = value
return
if current_node.next is None:
break
current_node = current_node.next
current_node.next = ListNode(key, value)
def get(self, key):
hash_key = self.hash(key)
current_node = self.table[hash_key]
while current_node:
if current_node.key == key:
return current_node.value
current_node = current_node.next
return None
def remove(self, key):
hash_key = self.hash(key)
current_node = self.table[hash_key]
previous_node = None
while current_node:
if current_node.key == key:
if previous_node:
previous_node.next = current_node.next
else:
self.table[hash_key] = current_node.next
return
previous_node = current_node
current_node = current_node.next
hash_table = HashTable()
hash_table.put('apple', 10)
hash_table.put('banana', 20)
hash_table.put('cherry', 30)
print(hash_table.get('apple')) # 输出 10
print(hash_table.get('banana')) # 输出 20
print(hash_table.get('cherry')) # 输出 30
hash_table.remove('banana')
print(hash_table.get('apple')) # 输出 10
print(hash_table.get('banana')) # 输出 None
print(hash_table.get('cherry')) # 输出 30
链式哈希表是一种常见的散列表实现方式。它可以有效地解决哈希冲突问题,提高插入、查找和删除数据的效率。我们可以使用Python中的字典和列表来实现链式哈希表。