Anul 3 Semestrul 1
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import copy
|
||||
|
||||
|
||||
class Node:
|
||||
def __init__(self, key, value):
|
||||
self.key = key
|
||||
self.value = value
|
||||
self.next = None
|
||||
|
||||
|
||||
class HashTable:
|
||||
def __init__(self):
|
||||
self.capacity = 2
|
||||
self.noOfElements = 0
|
||||
self.elementList = [None] * 2
|
||||
|
||||
def hash(self, value):
|
||||
if isinstance(value, int):
|
||||
return value % self.capacity
|
||||
|
||||
sum = 0
|
||||
for l in value:
|
||||
sum += ord(l)
|
||||
return sum % self.capacity
|
||||
|
||||
def insert(self, key, value):
|
||||
if self.noOfElements and (self.capacity // self.noOfElements < 2):
|
||||
self.resizeAndRehash()
|
||||
hash_key = self.hash(key)
|
||||
element = self.elementList[hash_key]
|
||||
|
||||
if element is None:
|
||||
self.elementList[hash_key] = Node(key, value)
|
||||
self.noOfElements += 1
|
||||
return
|
||||
|
||||
while element.next is not None:
|
||||
element = element.next
|
||||
element.next = Node(key, value)
|
||||
self.noOfElements += 1
|
||||
|
||||
def get(self, key):
|
||||
element = self.elementList[self.hash(key)]
|
||||
while element is not None:
|
||||
if element.key == key:
|
||||
return element.value
|
||||
element = element.next
|
||||
return None
|
||||
|
||||
def getPosition(self, key):
|
||||
element = self.elementList[self.hash(key)]
|
||||
position = 0
|
||||
while element is not None:
|
||||
if element.key == key:
|
||||
return (key,position)
|
||||
element = element.next
|
||||
position += 1
|
||||
return None
|
||||
|
||||
def resizeAndRehash(self):
|
||||
self.capacity *= 2
|
||||
|
||||
copyElementList = copy.deepcopy(self.elementList)
|
||||
self.elementList = [None] * self.capacity
|
||||
self.noOfElements = 0
|
||||
for element in copyElementList:
|
||||
copyElement = copy.deepcopy(element)
|
||||
while copyElement is not None:
|
||||
self.insert(copyElement.key, copyElement.value)
|
||||
copyElement = copyElement.next
|
||||
|
||||
def __str__(self):
|
||||
var = ""
|
||||
for element in self.elementList:
|
||||
while element is not None:
|
||||
var += f"{element.key} -> {element.value}\n"
|
||||
element = element.next
|
||||
return var
|
||||
Reference in New Issue
Block a user