Структура данных связанный список

Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 17 октября 2016; проверки требуют 10 правок.

Свя́зный спи́сок — базовая динамическая структура данных в информатике, состоящая из узлов, каждый из которых содержит как собственно данные, так и одну или две ссылки («связки») на следующий и/или предыдущий узел списка.[1] Принципиальным преимуществом перед массивом является структурная гибкость: порядок элементов связного списка может не совпадать с порядком расположения элементов данных в памяти компьютера[2], а порядок обхода списка всегда явно задаётся его внутренними связями.

Содержание

Линейный связный список[править | править вики-текст]

Односвязный список (однонаправленный связный список)[править | править вики-текст]

Single linked list.png Разновидность связного списка — односвязный список, содержащий 3 элемента

Линейный однонаправленный список — это структура данных, состоящая из элементов одного типа, связанных между собой последовательно посредством указателей. Каждый элемент списка имеет указатель на следующий элемент. Последний элемент списка указывает на NULL. Элемент, на который нет указателя, является первым (головным) элементом списка. Здесь ссылка в каждом узле указывает на следующий узел в списке. В односвязном списке можно передвигаться только в сторону конца списка. Узнать адрес предыдущего элемента, опираясь на содержимое текущего узла, невозможно.

В информатике линейный список обычно определяется как абстрактный тип данных (АТД), формализующий понятие упорядоченной коллекции данных. На практике линейные списки обычно реализуются при помощи массивов и связных списков. Иногда термин «список» неформально используется также как синоним понятия «связный список». К примеру, АТД нетипизированного изменяемого списка может быть определён как набор из конструктора и основных операций:

  • Операция, проверяющая список на пустоту.
  • Три операции добавления объекта в список (в начало, конец или внутрь после любого (n-го) элемента списка);
  • Операция, вычисляющая первый (головной) элемент списка;
  • Операция доступа к списку, состоящему из всех элементов исходного списка, кроме первого.

Характеристики[править | править вики-текст]

  • Длина списка. Количество элементов в списке.
  • Списки могут быть типизированными или нетипизированными. Если список типизирован, то тип его элементов задан, и все его элементы должны иметь типы, совместимые с заданным типом элементов списка. Чаще списки типизированы.
  • Список может быть сортированным или несортированным.
  • В зависимости от реализации может быть возможен произвольный доступ к элементам списка.

Односвязный список в языках программирования[править | править вики-текст]

Си

struct list { int field; // поле данных struct list next; // указатель на следующий элемент };

применение односвязного списка:

1 list l1 = (struct list)malloc(sizeof(struct list)); 2 l1->field = 1; 3 l1->next = (struct list)malloc(sizeof(struct list)); 4 l1->next.field = 2; 5 l1->next.next = (struct list)malloc(sizeof(struct list)); 6 / и т.д. /

Двусвязный список (двунаправленный связный список)[править | править вики-текст]

Doubly linked list.png

Здесь ссылки в каждом узле указывают на предыдущий и на последующий узел в списке. Как и односвязный список, двусвязный допускает только последовательный доступ к элементам, но при этом дает возможность перемещения в обе стороны. В этом списке проще производить удаление и перестановку элементов, так как легко доступны адреса тех элементов списка, указатели которых направлены на изменяемый элемент.

XOR-связный список[править | править вики-текст]

Основная статья: XOR-связный список

Используется редко.

Кольцевой связный список[править | править вики-текст]

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

Односвязный кольцевой список

Как правило, такая структура реализуется на базе линейного списка. С каждым кольцевым списком дополнительно хранится указатель на первый элемент. В этом списке ссылки на NULL не встречается.

Также существуют циклические списки с выделенным головным элементом, облегчающие полный проход через список.

Список с пропусками[править | править вики-текст]

Основная статья: Список с пропусками

Развёрнутый связный список[править | править вики-текст]

Основная статья: Развёрнутый связный список

  • эффективное (за константное время) добавление и удаление элементов
  • размер ограничен только объёмом памяти компьютера и разрядностью указателей
  • динамическое добавление и удаление элементов

Недостатки связных списков вытекают из их главного свойства — последовательного доступа к данным:

  • сложность прямого доступа к элементу, а именно определения физического адреса по его индексу (порядковому номеру) в списке
  • на поля-указатели (указатели на следующий и предыдущий элемент) расходуется дополнительная память (в массивах, например, указатели не нужны)
  • некоторые операции со списками медленнее, чем с массивами, так как к произвольному элементу списка можно обратиться, только пройдя все предшествующие ему элементы
  • соседние элементы списка могут быть распределены в памяти нелокально, что снизит эффективность кэширования данных в процессоре
  • над связными списками, по сравнению с массивами, гораздо труднее (хоть и возможно) производить параллельные векторные операции, такие, как вычисление суммы: накладные расходы на перебор элементов снижают эффективность распараллеливания
  1. Cormen, Leiserson, Rivest, and Stein. Introduction to Algorithms, 2nd edition. The MIT Press, 2001. ISBN 0-262-03293-7
  2. Выравнивание данных

Источник: 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

Закрыть ... [X]

10 структур данных, которые вы должны знать (видео и задания) Как убрать прыщи синяки от прыщей

Структура данных связанный список Структуры данных: Теоретический материал: списки (Паскаль)
Структура данных связанный список Просто о списках, словарях и множествах или ТОП 5 структур
Структура данных связанный список Структурирование данных с помощью JavaScript: Односвязные и
Структура данных связанный список Работа со структурами данных в языках Си и Python: Часть 3
Структура данных связанный список 10 типов структур данных, которые нужно знать видео и
Структура данных связанный список Реализации алгоритмов/Связный список Викиучебник
Структура данных связанный список Структуры данных Java. LinkedList - Stack Overflow на русском
Структура данных связанный список Вывести односвязный список
Список Викиконспекты Связные списки Водоснабжение частного дома из колодца своими руками как Вязание для детей до года Записи в рубрике Вязание для детей до Двухскатная крыша дома своими руками. ГЛАВНАЯ Интернет магазин Сто рецептов красоты - официальный сайт Кофточка и пинеточки для куклы - Вязание - Страна Мам Модные стрижки для тонких волос: каре, боб