Anul 3 Semestrul 1

This commit is contained in:
2025-02-06 20:33:26 +02:00
parent 0b130ee18c
commit 184f3bd92e
313 changed files with 348499 additions and 0 deletions
@@ -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