from MyLinkedList import DerekLinkedList class DerekHashTable: def __init__(self) -> None: self.backingStore = [DerekLinkedList() for _ in range(36)] # Create a linked list backing for the hash table self.count = 0 def __iter__(self): for linkedList in self.backingStore: # Look at each linked list for data in linkedList: # Look at each item in the linked list yield data # Return the data from each cell def _calcHash(self, key) -> int: # Use the built in hash function return hash(key) % 36 # Modulo the size of the hash array def addItem(self, key, value): i = self._calcHash(key) # Calculate a hash/modulo and put in the correct list self.backingStore[i].append(key, value) self.count += 1 def getItem(self, key): i = self._calcHash(key) # Calculate the hash/modulo to get the data from the linked list return self.backingStore[i].get(key) def remItem(self, key): i = self._calcHash(key) # Calculate the hash/modulo to get the list self.backingStore[i].remove(key) # Remove the item from the list self.count -= 1