Введение
Структура данных связанного списка В информатике двойной связанный список - это структура данных, которая состоит из набора последовательно связанных записей, называемых узлами. Каждый узел содержит три поля: два поля ссылки (ссылки на предыдущий и на следующий узел в последовательности узлов) и одно поле данных. Предыдущие и следующие ссылки начальных и завершающих узлов, соответственно, указывают на какой-то терминатор, обычно - на сторожевой узел или нуль, чтобы облегчить прохождение списка. Если существует только один узел-сценарист, то список циркулярно связан через узел-сценарист. Его можно концептуализировать как два отдельно связанных списка, сформированных из одних и тех же элементов данных, но в противоположных последовательных порядках. Две узловые ссылки позволяют перемещаться по списку в любом направлении. Хотя добавление или удаление узла в двойной связанный список требует изменения большего количества ссылок, чем те же операции в одиночно связанном списке, операции проще и потенциально более эффективны (для узлов, отличных от первых узлов), потому что нет необходимости отслеживать предыдущий узел во время прохождения или нет необходимости пересекать список, чтобы найти предыдущий узел, чтобы его ссылку можно было изменить.
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 three fields: two link fields (references to the previous and to the next node in the sequence of nodes) and one data field. The beginning and ending nodes' previous and next links, respectively, point to some kind of terminator, typically a sentinel node or null, to facilitate traversal of the list. If there is only one sentinel node, then the list is circularly linked via the sentinel node. It can be conceptualized as two singly linked lists formed from the same data items, but in opposite sequential orders. The two node links allow traversal of the list in either direction. While adding or removing a node in a doubly linked list requires changing more links than the same operations on a singly linked list, the operations are simpler and potentially more efficient (for nodes other than first nodes) because there is no need to keep track of the previous node during traversal or no need to traverse the list to find the previous node, so that its link can be modified.
Номенклатура и реализация
Первый и последний узлы двойной ссылки для всех практических приложений являются сразу доступными (т.е. доступны без прохождения и обычно называются головой и хвостом) и, следовательно, позволяют проходить список с начала или конца списка, соответственно: например, проходя список от начала до конца или от конца до начала, в поиске в списке узла с определенным значением данных. Любой узел двойного списка, полученный, может быть использован для начала нового перехода в любом направлении (к началу или концу) из данного узла. Поля ссылок двойного узла списка часто называются следующим и предыдущим или передовым и задним. Ссылки, хранящиеся в полях ссылок, обычно реализуются в качестве указателей, но (как и в любой связанной структуре данных) они также могут быть смещенными адресами или индексами в массив, где находятся узлы.
Удаление узла
Как и в двойных списках, "removeAfter" и "removeBefore" могут быть реализованы с помощью "remove(list, node. prev) " и "remove{}list, node. следующий)".
Асимметричный список с двойной ссылкой
Асимметричный список с двойными ссылками находится где-то между отдельно связанным списком и обычным списком с двойными ссылками. Он имеет некоторые особенности с односторонне связанным списком (одностороннее перемещение) и другие из двойным списком (легкость модификации). Это список, в котором предыдущая ссылка каждого узла указывает не на предыдущий узел, а на ссылку на себя. Хотя это мало отличает узлы (он просто указывает на смещение в пределах предыдущего узла), он меняет заголовок списка: он позволяет первому узлу легко модифицировать ссылку firstNode. Пока узел находится в списке, его предыдущая ссылка никогда не будет нулевой.
It is a list where each node's previous link points not to the previous node, but to the link to itself. While this makes little difference between nodes (it just points to an offset within the previous node), it changes the head of the list: It allows the first node to modify the firstNode link easily. As long as a node is in a list, its previous link is never null.