Delete src/hash_table.py
This commit is contained in:
parent
fb367515f8
commit
8a54fc4485
|
|
@ -1,46 +0,0 @@
|
||||||
# hash_table.py
|
|
||||||
# Хеш-таблица с цепочками (использует linked_list.py)
|
|
||||||
|
|
||||||
import linked_list as ll
|
|
||||||
|
|
||||||
def create_hash_table(size=1000):
|
|
||||||
"""
|
|
||||||
Создаёт пустую хеш-таблицу.
|
|
||||||
size – количество корзин (рекомендуется простое число).
|
|
||||||
"""
|
|
||||||
return [None] * size
|
|
||||||
|
|
||||||
def _hash(name, table_size):
|
|
||||||
"""Простая хеш-функция на основе суммы кодов символов."""
|
|
||||||
return sum(ord(ch) for ch in name) % table_size
|
|
||||||
|
|
||||||
def ht_insert(table, name, phone):
|
|
||||||
"""Вставляет или обновляет запись."""
|
|
||||||
idx = _hash(name, len(table))
|
|
||||||
# Вставляем в связный список в этой корзине
|
|
||||||
table[idx] = ll.ll_insert(table[idx], name, phone)
|
|
||||||
|
|
||||||
def ht_find(table, name):
|
|
||||||
"""Ищет телефон по имени."""
|
|
||||||
idx = _hash(name, len(table))
|
|
||||||
return ll.ll_find(table[idx], name)
|
|
||||||
|
|
||||||
def ht_delete(table, name):
|
|
||||||
"""Удаляет запись по имени."""
|
|
||||||
idx = _hash(name, len(table))
|
|
||||||
table[idx] = ll.ll_delete(table[idx], name)
|
|
||||||
|
|
||||||
def ht_list_all(table):
|
|
||||||
"""
|
|
||||||
Собирает все записи из всех корзин,
|
|
||||||
возвращает отсортированный по имени список.
|
|
||||||
"""
|
|
||||||
records = []
|
|
||||||
for bucket in table:
|
|
||||||
# Каждая корзина – голова связного списка
|
|
||||||
current = bucket
|
|
||||||
while current is not None:
|
|
||||||
records.append((current['name'], current['phone']))
|
|
||||||
current = current['next']
|
|
||||||
records.sort(key=lambda x: x[0])
|
|
||||||
return record
|
|
||||||
Loading…
Reference in New Issue
Block a user