Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
структуры и алгоритмы / Лекции_лабор_структ.doc
Скачиваний:
60
Добавлен:
04.06.2015
Размер:
2.98 Mб
Скачать

4 Линейные динамические структуры

4.1 Характерные черты динамических структур

Динамическая структура характеризуется следующими чертами.

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

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

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

4.2 Односвязные списки

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

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

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

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

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

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

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

Соседние файлы в папке структуры и алгоритмы