diff --git a/MusinAA/task-1/LinkedList.py b/MusinAA/task-1/LinkedList.py deleted file mode 100644 index c9dd29f..0000000 --- a/MusinAA/task-1/LinkedList.py +++ /dev/null @@ -1,25 +0,0 @@ -""" -Связный список (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 diff --git a/MusinAA/task1/__init__.py b/MusinAA/task1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/MusinAA/task-1/BinaryTree.py b/MusinAA/task1/structures/BinaryTree.py similarity index 100% rename from MusinAA/task-1/BinaryTree.py rename to MusinAA/task1/structures/BinaryTree.py diff --git a/MusinAA/task-1/HashTable.py b/MusinAA/task1/structures/HashTable.py similarity index 100% rename from MusinAA/task-1/HashTable.py rename to MusinAA/task1/structures/HashTable.py diff --git a/MusinAA/task1/structures/LinkedList.py b/MusinAA/task1/structures/LinkedList.py new file mode 100644 index 0000000..54850ad --- /dev/null +++ b/MusinAA/task1/structures/LinkedList.py @@ -0,0 +1,60 @@ +""" +Связный список (LinkedListPhoneBook) + +Узел представляется словарём: +{'name': 'Имя', 'phone': '123', 'next': None}. +""" + + +def ll_insert(head : dict|None, name: str, phone: str) -> dict: + """ + Проходит до конца (или сразу добавляет в конец) и возвращает новую + голову (если вставка в начало) или изменяет список по ссылке. + Удобнее возвращать новую голову, если вставка может быть в начало. + """ + + newNode = {'name': name, 'phone': phone, 'next': None} + if head == None: + return newNode + + currentNode = head + while currentNode['next'] != None: + currentNode = currentNode['next'] + currentNode['next'] = newNode + return head + +def ll_find(head : dict|None, name: str) -> str|None: + """Ищет узел, возвращает телефон или None.""" + currentNode = head + while currentNode != None: + if currentNode['name'] == name: + return currentNode['phone'] + currentNode = currentNode['next'] + return None + +def ll_delete(head : dict|None, name: str) -> dict: + """Удаляет узел, возвращает новую голову.""" + if head == None: + return None + + if head['name'] == name: + return head['next'] + + currentNode = head + while currentNode['next'] != None: + if currentNode['next']['name'] == name: + currentNode['next'] = currentNode['next']['next'] + return head + currentNode = currentNode['next'] + return head + +def ll_list_all(head: dict|None) -> list: + """Cобирает все записи в список и сортирует. + сортировка вынесена отдельно).""" + records = [] + currentNode = head + while currentNode != None: + records.append((currentNode['name'], currentNode['phone'])) + currentNode = currentNode['next'] + records.sort(key=lambda item: item[0]) + return records \ No newline at end of file diff --git a/MusinAA/task1/structures/__init__.py b/MusinAA/task1/structures/__init__.py new file mode 100644 index 0000000..e69de29