diff --git a/soninrv/docs/data/lab1/phonebook.py b/soninrv/docs/data/lab1/phonebook.py new file mode 100644 index 0000000..89243d4 --- /dev/null +++ b/soninrv/docs/data/lab1/phonebook.py @@ -0,0 +1,53 @@ +# 1. СВЯЗНЫЙ СПИСОК +def ll_create_node(name, phone): + return {'name': name, 'phone': phone, 'next': None} + + +def ll_insert(head, name, phone): + """Добавить или обновить запись. Возвращает голову списка.""" + node = head + while node is not None: + if node['name'] == name: + node['phone'] = phone # обновить + return head + node = node['next'] + # Вставка в начало — O(1) + new_node = ll_create_node(name, phone) + new_node['next'] = head + return new_node + + +def ll_find(head, name): + """Вернуть телефон или None.""" + node = head + while node is not None: + if node['name'] == name: + return node['phone'] + node = node['next'] + return None + + +def ll_delete(head, name): + """Удалить узел, вернуть новую голову.""" + if head is None: + return None + if head['name'] == name: + return head['next'] + prev, node = head, head['next'] + while node is not None: + if node['name'] == name: + prev['next'] = node['next'] + return head + prev, node = node, node['next'] + return head + + +def ll_list_all(head): + """Собрать все записи и вернуть отсортированный список (name, phone).""" + result = [] + node = head + while node is not None: + result.append((node['name'], node['phone'])) + node = node['next'] + result.sort(key=lambda x: x[0]) + return result \ No newline at end of file