Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документ Microsoft Office Word (2).docx
Скачиваний:
44
Добавлен:
09.02.2015
Размер:
842.69 Кб
Скачать

27. Динамические структуры данных | Связные списки

1 Связное представление данных в памяти

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

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

  • поля связок, в котором содержатся один или несколько указателей, связывающий данный элемент с другими элементами структуры;

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

  • размер структуры ограничивается только доступным объемом машинной памяти;

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

Вместе с тем связное представление не лишено и недостатков, основные из которых:

  • работа с указателями требует, как правило, более высокой квалификации от программиста;

  • на поля связок расходуется дополнительная память;

  • доступ к элементам связной структуры может быть менее эффективным по времени.

 

 

2 Связные линейные списки

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

2.1 Машинное представление связных линейных списков

На рис. 5.1 приведена структура односвязного списка. На нем поле INF - информационное поле, данные, NEXT - указатель на следующий элемент списка. Каждый список должен иметь особый элемент, называемый указателем начала списка или головой списка, который обычно по формату отличен от остальных элементов. В поле указателя последнего элемента списка находится специальный признак nil, свидетельствующий о конце списка

 

Рис.5.1.  Структура односвязного списка

 

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

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

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

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