Compare commits

...

1 Commits

3 changed files with 75 additions and 0 deletions

View File

@ -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):
"""Центрированный обход.
Рекурсивно собирает записи в отсортированном порядке."""

View File

@ -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):
"""Собирает все записи из всех бакетов и сортирует"""

View File

@ -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обирает все записи в список и сортирует.
сортировка вынесена отдельно)."""