python 实现哈希表
class Node:
def __init__(self, key, val):
self.key = key
self.val = val
self.next = None
class HashTable:
def __init__(self):
self.size = 100
self.table = [None] * self.size
def hash_func(self, key):
return sum([ord(c) for c in key]) % self.size
def insert(self, key, value):
hash_value = self.hash_func(key)
if self.table[hash_value] is None:
self.table[hash_value] = Node(key, value)
else:
cur = self.table[hash_value]
while cur.next is not None:
cur = cur.next
cur.next = Node(key, value)
def search(self, key):
hash_value = self.hash_func(key)
if self.table[hash_value] is None:
return None
else:
cur = self.table[hash_value]
while cur is not None:
if cur.key == key:
return cur.val
else:
cur = cur.next
return None
def delete(self, key):
hash_value = self.hash_func(key)
if self.table[hash_value] is None:
return
elif self.table[hash_value].key == key:
self.table[hash_value] = self.table[hash_value].next
else:
cur = self.table[hash_value]
while cur.next is not None:
if cur.next.key == key:
cur.next = cur.next.next
return
else:
cur = cur.next
ht = HashTable()
ht.insert('apple', 2)
ht.insert('banana', 1)
ht.insert('orange', 7)
print(ht.search('apple')) # 2
print(ht.search('banana')) # 1
print(ht.search('orange')) # 7
print(ht.search('lemon')) # None
ht.delete('apple')
print(ht.search('apple')) # None