diff --git a/BoriskovaDV/docs/data/1-st-exercise/hash_table_phonebook.py b/BoriskovaDV/docs/data/1-st-exercise/hash_table_phonebook.py new file mode 100644 index 0000000..21a85ca --- /dev/null +++ b/BoriskovaDV/docs/data/1-st-exercise/hash_table_phonebook.py @@ -0,0 +1,47 @@ +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)) \ No newline at end of file