wgu_repo/Data Structures and Algorithms II — C950/Task 2 - Python files + Screenshots/Python files and screenshots/hash_table.py

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