diff --git a/famutdinovmd/tasks/1/BinaryTree.py b/famutdinovmd/tasks/1/BinaryTree.py new file mode 100644 index 0000000..d460942 --- /dev/null +++ b/famutdinovmd/tasks/1/BinaryTree.py @@ -0,0 +1,23 @@ +""" +Двоичное дерево поиска + +Узел — словарь: +{'name': 'Имя', 'phone': '123', 'left': None, 'right': None}. +""" + +def bst_insert(root, name, phone): + """Итеративно вставляет, возвращает новый корень (если корень меняется).""" + + +def bst_find(root, name): + """Поиск в ширину.""" + +def bst_delete(root, name): + """Удаляет узел и возвращает новый корень.""" + + +def bst_list_all(root): + """Центрированный обход. + Рекурсивно собирает записи в отсортированном порядке.""" + + \ No newline at end of file diff --git a/famutdinovmd/tasks/1/HashTable.py b/famutdinovmd/tasks/1/HashTable.py new file mode 100644 index 0000000..bcc7268 --- /dev/null +++ b/famutdinovmd/tasks/1/HashTable.py @@ -0,0 +1,27 @@ +""" +Хеш-таблица + +Хранится как список buckets фиксированной длины, +каждый элемент — голова связного списка (или None). +""" + +from LinkedList import * + +def hash_fun(name, size) : + """Принимает имя и возвращает индекс бакета для него.""" + +def ht_insert(buckets, name, phone, blen=50): + """Возвращает новый массив бакетов + Вычисляет индекс, вызывает ll_insert для соответствующего бакета. + Функция не меняет размер массива бакетов автоматически!""" + +def ht_delete(buckets, name): + """Возвращает новый массив бакетов без элемента с именем name""" + + +def ht_find(buckets, name): + """поиск в хеш таблице хз че это загугли""" + +def ht_list_all(buckets): + """Собирает все записи из всех бакетов и сортирует""" + \ No newline at end of file diff --git a/famutdinovmd/tasks/1/LinkedList.py b/famutdinovmd/tasks/1/LinkedList.py new file mode 100644 index 0000000..2698f8d --- /dev/null +++ b/famutdinovmd/tasks/1/LinkedList.py @@ -0,0 +1,25 @@ +""" +Связный список (LinkedListPhoneBook) + +Узел представляется словарём: +{'name': 'Имя', 'phone': '123', 'next': None}. +""" + + +def ll_insert(head, name, phone): + """ + Проходит до конца (или сразу добавляет в конец) и возвращает новую + голову (если вставка в начало) или изменяет список по ссылке. + Удобнее возвращать новую голову, если вставка может быть в начало. + """ + +def ll_find(head, name): + """Ищет узел, возвращает телефон или None.""" + +def ll_delete(head, name): + """Удаляет узел, возвращает новую голову.""" + +def ll_list_all(head): + """Cобирает все записи в список и сортирует. + сортировка вынесена отдельно).""" + \ No newline at end of file