Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from modules.cases.best_case import *
- class Node:
- def __init__(self, data, next_element=None):
- self.data = data
- self.next_element: Node = next_element
- class Chain:
- def __init__(self, size):
- self.fill_factor = 0.8
- self.table_size = size # Размер таблицы
- self.bucket_size = 0 # Количество головных узлов
- self.size = 0 # Количество элементов
- self.slots: list[Node] = [None] * self.table_size
- self.put_it = []
- self.search_it = []
- self.del_it = []
- def resize(self):
- self.table_size *= 2
- self.size = 0
- self.bucket_size = 0
- self.slots, old_slots = [None] * self.table_size, self.slots
- for i in old_slots:
- while i is not None:
- self.insert(i.data)
- i = i.next_element
- def insert(self, string):
- if (self.size + 1) > self.fill_factor * self.table_size:
- self.resize()
- key, h = first_hashing(string, self.table_size)
- cell: Node = self.slots[h]
- node = Node(string)
- i = 1
- if cell is None:
- self.size += 1
- self.bucket_size += 1
- self.slots[h] = node
- self.put_it.append(i)
- return
- while cell is not None:
- if cell.data == string:
- self.put_it.append(i)
- return
- if cell.next_element is None:
- break
- cell = cell.next_element
- i += 1
- cell.next_element = node
- self.size += 1
- self.put_it.append(i)
- def search(self, string):
- result = 'Not found!'
- key, h = first_hashing(string, self.table_size)
- cell = self.slots[h]
- ind = 1
- if not cell:
- self.search_it.append(ind)
- return result
- while cell:
- if cell.data == string:
- result = 'yes'
- break
- cell = cell.next_element
- ind += 1
- self.search_it.append(ind)
- return result
- def delete(self, string):
- key, h = first_hashing(string, self.table_size)
- cell: Node = self.slots[h]
- ind = 1
- if cell is None:
- self.del_it.append(ind)
- return
- if cell.data == string:
- # if cell.next_element is not None:
- # self.bucket_size -= 1
- self.size -= 1
- self.slots[h] = cell.next_element
- self.del_it.append(ind)
- return
- while cell.next_element is not None:
- if cell.next_element.data == string:
- self.size -= 1
- cell.next_element = cell.next_element.next_element
- self.del_it.append(ind)
- return
- ind += 1
- cell = cell.next_element
- self.del_it.append(ind)
- return
Add Comment
Please, Sign In to add comment