# Хеш-таблица на основе списка корзин, каждая корзина – связный список

import linked_list as ll

def create_hash_table(size=10):
    return [None] * size

def _hash_function(key, size):
    return hash(key) % size

def ht_insert(buckets, name, phone):
    idx = _hash_function(name, len(buckets))
    head = buckets[idx]
    new_head = ll.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.ll_find(head, name)

def ht_delete(buckets, name):
    idx = _hash_function(name, len(buckets))
    head = buckets[idx]
    new_head = ll.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