From a95dbdf35b0367fb599929478521d75a7fc49b67 Mon Sep 17 00:00:00 2001 From: SavelevMI Date: Thu, 21 May 2026 13:36:53 +0000 Subject: [PATCH] [1] Add hash table using linked list buckets --- .../docs/data/1-st-exersize/hash_table.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 SavelevMI/docs/data/1-st-exersize/hash_table.py diff --git a/SavelevMI/docs/data/1-st-exersize/hash_table.py b/SavelevMI/docs/data/1-st-exersize/hash_table.py new file mode 100644 index 0000000..ef3d24b --- /dev/null +++ b/SavelevMI/docs/data/1-st-exersize/hash_table.py @@ -0,0 +1,38 @@ +# Хеш-таблица на основе списка корзин, каждая корзина – связный список + +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 \ No newline at end of file