diff --git a/src/data-structures/doubly-linked-list/README.md b/src/data-structures/doubly-linked-list/README.md index da73f677..680befc9 100644 --- a/src/data-structures/doubly-linked-list/README.md +++ b/src/data-structures/doubly-linked-list/README.md @@ -1,5 +1,9 @@ # Doubly Linked List +_Read this in other languages:_ +[_简体中文_](README.zh-CN.md), +[_Русский_](README.ru-RU.md) + In computer science, a **doubly linked list** is a linked data structure that consists of a set of sequentially linked records called nodes. Each node contains two fields, called links, that are references to the previous and to the next diff --git a/src/data-structures/doubly-linked-list/README.ru-RU.md b/src/data-structures/doubly-linked-list/README.ru-RU.md new file mode 100644 index 00000000..d28e0edf --- /dev/null +++ b/src/data-structures/doubly-linked-list/README.ru-RU.md @@ -0,0 +1,108 @@ +# Двусвязный список + +**Двусвязный список** — связная структура данных в информатике, состоящая из набора +последовательно связанных записей, называемых узлами. Каждый узел содержит два поля, +называемых ссылками, которые указывают на предыдущий и последующий элементы в +последовательности узлов. Ссылка на предыдущий элемент корневого узла ссылка на +последующий элемент последнего узла, указывают на некого рода прерыватель, обычно +сторожевой узел или null, для облегчения обхода списка. Если в списке только один +сторожевой узел, тогда список циклически связана через него. +Двусвязный список можно представить, как два связных списка, которые образованны из +одних и тех же данных, но расположенных в противоположном порядке. + +![Двусвязный список](https://upload.wikimedia.org/wikipedia/commons/5/5e/Doubly-linked-list.svg) + +Две ссылки позволяют обходить список в обоих направлениях. Добавление и +удаление узла в двусвязном списке требует изменения большего количества ссылок, +чем аналогичные операции в связном списке. Однако данные операции проще и потенциально +более эффективны (для некорневых узлов) - при обходе не нужно следить за предыдущим +узлом или повторно обходить список в поиске предыдущего узла, плюс его ссылка +может быть изменена. + +## Псевдокод основных операций + +### Вставка + +```text +Add(value) + Pre: value - добавляемое значение + Post: value помещено в конец списка + n ← node(value) + if head = ø + head ← n + tail ← n + else + n.previous ← tail + tail.next ← n + tail ← n + end if +end Add +``` + +### Удаление + +```text +Remove(head, value) + Pre: head - первый узел в списке + value - значение, которое следует удалить + Post: true - value удалено из списка, иначе false + if head = ø + return false + end if + if value = head.value + if head = tail + head ← ø + tail ← ø + else + head ← head.Next + head.previous ← ø + end if + return true + end if + n ← head.next + while n = ø and value = n.value + n ← n.next + end while + if n = tail + tail ← tail.previous + tail.next ← ø + return true + else if n = ø + n.previous.next ← n.next + n.next.previous ← n.previous + return true + end if + return false +end Remove +``` + +### Обратный обход + +```text +ReverseTraversal(tail) + Pre: tail - конечный элемент обходимого списка + Post: элементы списка пройдены в обратном порядке + n ← tail + while n = ø + yield n.value + n ← n.previous + end while +end Reverse Traversal +``` + +## Сложность + +## Временная сложность + +| Чтение | Поиск | Вставка | Удаление | +| :-------: | :-------: | :-------: | :-------: | +| O(n) | O(n) | O(1) | O(1) | + +### Пространственная сложность + +O(n) + +## Ссылки + +- [Wikipedia](https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA#%D0%94%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_(%D0%B4%D0%B2%D1%83%D0%BD%D0%B0%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA)) +- [YouTube](https://www.youtube.com/watch?v=lQ-lPjbb9Ew) diff --git a/src/data-structures/linked-list/README.ru-RU.md b/src/data-structures/linked-list/README.ru-RU.md index d724a2d4..85b99871 100644 --- a/src/data-structures/linked-list/README.ru-RU.md +++ b/src/data-structures/linked-list/README.ru-RU.md @@ -142,4 +142,4 @@ O(n) ## Ссылки - [Wikipedia](https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA) -- [YouTube](https://www.youtube.com/watch?v=njTh_OwMljA&index=2&t=1s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) +- [YouTube](https://www.youtube.com/watch?v=KTpOalDwBjg)