Введение

Структура данных связанного списка В информатике двойной связанный список - это структура данных, которая состоит из набора последовательно связанных записей, называемых узлами. Каждый узел содержит три поля: два поля ссылки (ссылки на предыдущий и на следующий узел в последовательности узлов) и одно поле данных. Предыдущие и следующие ссылки начальных и завершающих узлов, соответственно, указывают на какой-то терминатор, обычно - на сторожевой узел или нуль, чтобы облегчить прохождение списка. Если существует только один узел-сценарист, то список циркулярно связан через узел-сценарист. Его можно концептуализировать как два отдельно связанных списка, сформированных из одних и тех же элементов данных, но в противоположных последовательных порядках. Две узловые ссылки позволяют перемещаться по списку в любом направлении. Хотя добавление или удаление узла в двойной связанный список требует изменения большего количества ссылок, чем те же операции в одиночно связанном списке, операции проще и потенциально более эффективны (для узлов, отличных от первых узлов), потому что нет необходимости отслеживать предыдущий узел во время прохождения или нет необходимости пересекать список, чтобы найти предыдущий узел, чтобы его ссылку можно было изменить.

Номенклатура и реализация

Первый и последний узлы двойной ссылки для всех практических приложений являются сразу доступными (т.е. доступны без прохождения и обычно называются головой и хвостом) и, следовательно, позволяют проходить список с начала или конца списка, соответственно: например, проходя список от начала до конца или от конца до начала, в поиске в списке узла с определенным значением данных. Любой узел двойного списка, полученный, может быть использован для начала нового перехода в любом направлении (к началу или концу) из данного узла. Поля ссылок двойного узла списка часто называются следующим и предыдущим или передовым и задним. Ссылки, хранящиеся в полях ссылок, обычно реализуются в качестве указателей, но (как и в любой связанной структуре данных) они также могут быть смещенными адресами или индексами в массив, где находятся узлы.

Удаление узла

Как и в двойных списках, "removeAfter" и "removeBefore" могут быть реализованы с помощью "remove(list, node. prev) " и "remove{}list, node. следующий)".

Асимметричный список с двойной ссылкой

Асимметричный список с двойными ссылками находится где-то между отдельно связанным списком и обычным списком с двойными ссылками. Он имеет некоторые особенности с односторонне связанным списком (одностороннее перемещение) и другие из двойным списком (легкость модификации). Это список, в котором предыдущая ссылка каждого узла указывает не на предыдущий узел, а на ссылку на себя. Хотя это мало отличает узлы (он просто указывает на смещение в пределах предыдущего узла), он меняет заголовок списка: он позволяет первому узлу легко модифицировать ссылку firstNode. Пока узел находится в списке, его предыдущая ссылка никогда не будет нулевой.