WikiDer > Связанная структура данных

Linked data structure

В Информатика, а связанная структура данных это структура данных который состоит из набора записи данных (узлы) соединены и организованы Рекомендации (ссылки или же указатели). Связь между данными также можно назвать соединитель.

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

Связывание может быть выполнено двумя способами - с использованием динамического распределения и с использованием связывания индекса массива.

Связанные структуры данных включают связанные списки, деревья поиска, деревья выраженияи многие другие широко используемые структуры данных. Они также являются ключевыми строительными блоками для многих эффективных алгоритмов, таких как топологическая сортировка[1] и установить объединение-найти.[2]

Общие типы связанных структур данных

Связанные списки

Связанный список - это набор структур, упорядоченных не по их физическому размещению в памяти, а по логическим связям, которые хранятся как часть данных в самой структуре. Нет необходимости хранить его в соседних ячейках памяти. Каждый структура имеет поле данных и поле адреса. Поле Address содержит адрес своего преемник.

Связанный список может быть односвязным, двусвязным или многосвязным, а также линейным или кольцевым.

Основные свойства
  • Объекты, называемые узлы, связаны в линейной последовательности.
  • Ссылка на первый узел списка всегда сохраняется. Это называется «голова» или «перед».[3]
Односвязный-list.svg
Связанный список с тремя узлами содержит по два поля каждое: целочисленное значение и ссылку на следующий узел.
Связанный список с одним узлом.

Пример на Java

Это пример класса узла, используемого для хранения целых чисел в Java-реализации связанного списка:

общественный учебный класс IntNode {     общественный int ценить;     общественный IntNode связь;     общественный IntNode(int v) { ценить = v; }}

Пример на C

Это пример структуры, используемой для реализации связного списка в C:

структура узел{	int вал;	структура узел *следующий;};

Это пример использования typedefs:

typedef структура узел узел;структура узел{	int вал;	узел *следующий;};

Примечание: Такая структура, которая содержит член, указывающий на ту же структуру, называется самореферентной структурой.

Пример на C ++

Это пример структуры класса узла, используемой для реализации связного списка в C ++:

учебный класс Узел{	int вал;	Узел *следующий;};

Деревья поиска

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

Основные свойства
  • Объекты, называемые узлами, хранятся в упорядоченном наборе.
  • Обход по порядку обеспечивает считывание данных в дереве по возрастанию.

Преимущества и недостатки

Связанный список против массивов

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

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

С другой стороны, доступ к любому конкретному узлу в связанной структуре данных требует следования цепочке ссылок, которые хранятся в каждом узле. Если в структуре есть п узлов, и каждый узел содержит не более б ссылки, будут некоторые узлы, которые не могут быть достигнуты менее чем за журналб п шаги, замедляющие процесс доступа к этим узлам - это иногда представляет собой значительное замедление, особенно в случае структур, содержащих большое количество узлов. Для многих структур некоторые узлы могут потребовать худший случай вплоть до п−1 шаг. Напротив, многие структуры данных массивов позволяют получить доступ к любому элементу с постоянным количеством операций, независимо от количества записей.

В целом реализация этой связанной структуры данных осуществляется через динамические структуры данных. Это дает нам возможность снова использовать определенное пространство. Память можно использовать более эффективно, используя эти структуры данных. Память распределяется по мере необходимости, и когда память больше не нужна, выполняется ее освобождение.

Общие недостатки

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

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

В некоторых теоретические модели вычислений которые обеспечивают соблюдение ограничений связанных структур, таких как указатель машины, многие задачи требуют большего количества шагов, чем в неограниченном машина с произвольным доступом модель.

Смотрите также

Рекомендации

  1. ^ Дональд Кнут, Искусство программирования
  2. ^ Бернард А. Галлер и Майкл Дж. Фишер. Улучшенный алгоритм эквивалентности. Коммуникации ACM, Том 7, выпуск 5 (май 1964 г.), страницы 301–303. Бумага, порождающая непересекающиеся леса. Цифровая библиотека ACM
  3. ^ http://www.cs.toronto.edu/~hojjat/148s07/lectures/week5/07linked.pdf