# 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