from linked_list_phonebook import ll_insert, ll_find, ll_delete, ll_list_all def hash_function(name, table_size): return hash(name) % table_size def ht_insert(buckets, name, phone): idx = hash_function(name, len(buckets)) head = buckets[idx] new_head = ll_insert(head, name, phone) buckets[idx] = new_head return buckets def ht_find(buckets, name): idx = hash_function(name, len(buckets)) head = buckets[idx] return ll_find(head, name) def ht_delete(buckets, name): idx = hash_function(name, len(buckets)) head = buckets[idx] new_head = ll_delete(head, name) buckets[idx] = new_head return buckets def ht_list_all(buckets): all_records = [] for head in buckets: current = head while current is not None: all_records.append((current['name'], current['phone'])) current = current['next'] all_records.sort(key=lambda x: x[0]) return all_records if __name__ == '__main__': SIZE = 5 buckets = [None] * SIZE ht_insert(buckets, 'Иван', '123-456') ht_insert(buckets, 'Борис', '789-012') ht_insert(buckets, 'Анна', '345-678') ht_insert(buckets, 'Иван', '111-222') print(ht_list_all(buckets)) print(ht_find(buckets, 'Анна')) print(ht_find(buckets, 'Петр')) ht_delete(buckets, 'Борис') print(ht_list_all(buckets))