66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
# Student ID: 012498637
|
|
# Student Name: Zakaria Benmoulay
|
|
# Course: C950 - Data Structures and Algorithms II
|
|
|
|
|
|
class ChainingHashTable:
|
|
|
|
# We are going to assigns all buckets with an empty list.
|
|
def __init__(self, initial_capacity=40):
|
|
# Let's initialize the hash table with empty bucket list entries.
|
|
self.table = []
|
|
for i in range(initial_capacity):
|
|
self.table.append([])
|
|
|
|
# This func inserts a new item into the hash table.
|
|
def insert(self, key, item):
|
|
# Get the bucket list where this item will go.
|
|
bucket = hash(key) % len(self.table)
|
|
bucket_list = self.table[bucket]
|
|
|
|
# Let's check if the key already exists and update it if found.
|
|
for kv in bucket_list:
|
|
if kv[0] == key:
|
|
kv[1] = item
|
|
return True
|
|
|
|
# otherwise, we insert the item to the end of list.
|
|
key_value = [key, item]
|
|
bucket_list.append(key_value)
|
|
return True
|
|
|
|
# This func returns the item if found, or None if not found.
|
|
def lookup(self, key):
|
|
# Let's find the correct bucket for this key.
|
|
bucket = hash(key) % len(self.table)
|
|
bucket_list = self.table[bucket]
|
|
|
|
# Let's search through the bucket for the matching key.
|
|
for kv in bucket_list:
|
|
if kv[0] == key:
|
|
return kv[1]
|
|
return None
|
|
|
|
# This func removes an item with matching key from the hash table.
|
|
def remove(self, key):
|
|
# Let's find the bucket where this key should exist.
|
|
bucket = hash(key) % len(self.table)
|
|
bucket_list = self.table[bucket]
|
|
|
|
# Let's search for and remove the matching key-value pair.
|
|
for kv in bucket_list:
|
|
if kv[0] == key:
|
|
bucket_list.remove([kv[0], kv[1]])
|
|
return print('Package ', key, 'successfully deleted.')
|
|
|
|
# Let's return None if the key is not found.
|
|
return None
|
|
|
|
# This func returns a list of all (key, value) tuples stored in the hash table.
|
|
# Let's use this to iterate through all packages when needed.
|
|
def get_all(self):
|
|
result = []
|
|
for bucket_list in self.table:
|
|
for kv in bucket_list:
|
|
result.append((kv[0], kv[1]))
|
|
return result |