- •Введение
- •1 Основные понятия о типах и структурах данных
- •2 Простейшие статические структуры
- •2.1 Характерные свойства статических структур
- •2.2 Векторы
- •2.3 Массивы
- •2.4 Записи
- •2.5 Таблицы
- •2.6 Характерные свойства статических структур
- •3 Полустатические структуры
- •3.1 Общее понятие списковой структуры
- •3.2 Стеки
- •3.3 Очереди
- •3.4 Деки
- •4 Линейные динамические структуры
- •4.1 Характерные черты динамических структур
- •4.2 Односвязные списки
- •4.3 Двусвязные списки
- •4.4 Организация и представление линейных связных списков в памяти эвм
- •4.5 Представление стеков, очередей и деков линейными списками
- •5 Нелинейные связные структуры
- •5.1 Обобщенные двусвязные списки
- •5.2 Многосвязные списки
- •5.3 Сетевые структуры
- •5.4 Деревья
- •5.5 Бинарные деревья
- •6 Строковые данные
- •6.1 Строки
- •6.2 Векторное представление строк
- •6.3 Списковое представление строк
- •7 Файлы
- •7.1 Организация файлов на устройствах внешней памяти
- •7.2 Основные типы файлов
- •7.3 Последовательные файлы
- •7.4 Библиотечные файлы
- •7.5 Файлы прямого доступа
- •7.6 Индексно-последовательные файлы
- •8 Системы управления базами данных
- •8.1 Сущность базы данных и системы управления базами данных
- •8.2 Классификация банков данных и их составных частей
- •8.3 Иерархическая и сетевая модели баз данных
- •8.4 Реляционная модель базы данных
- •9 Задачи и упражнения
- •9.1. Векторы
- •9.2 Матрицы
- •9.3 Строки
- •9.4 Записи и таблицы
- •9.5 Списки
- •9.6 Очереди, стеки, деки
- •9.7 Двоичные деревья
- •Библиографический список
- •Содержание
- •Структуры данных
- •650049, Красноярск, пр.Мира 82.
4.4 Организация и представление линейных связных списков в памяти эвм
Остановимся на вопросах организации и представления линейных связных списков в машинной памяти. Прежде всего, отметим, что операция исключения элемента из одного списка логически влечет за собой операцию включения исключенного элемента в другой список. Это означает, что при использовании списковых структур в системе создается не менее двух списков, один из которых (функциональный список) предназначается для хранения той или иной полезной информации, а другой содержит свободные элементы. В системе могут существовать одновременно много списков. Если элементы всех функциональных списков имеют одну и ту же структуру и размер, то на всю группу этих списков достаточно иметь один свободный список. В противном случае придется создавать и поддерживать столько свободных списков, сколько имеется разных структур элементов функциональных списков в системе.
Первоначально, как правило, все списки в системе, за исключением свободных списков, пусты и каждый занимает в машинной памяти участок, необходимый лишь для дескриптора. При этом свободные списки имеют максимальное число элементов. Каждый свободный список первоначально занимает в памяти непрерывную область. Физически последовательность элементов в такой области безразлична, но обычно элементы свободного списка первоначально размещаются в отведенной им области памяти в том же физическом порядке, в каком они связаны в список. Поля дескриптора свободного списка имеют значения, определяемые адресом первого элемента списка, числом элементов в списке и другими величинами, которые включаются в дескриптор.
В процессе работы той программно-информационной системы, в которую входят списки, происходит многократная перекачка элементов из свободного списка в функциональные списки и наоборот, а также из одного функционального списка в другой. В результате этого изменяются число и последовательность элементов в разных списках, а в области памяти, занимаемой элементами того или иного списка, могут появиться многочисленные "дыры", в которых содержатся элементы других списков.
4.5 Представление стеков, очередей и деков линейными списками
Линейные связные списки весьма удобны для организации и обработки таких структур данных с линейным упорядочением элементов, которые могут быть подвержены частым и непредвиденным изменениям по числу элементов. Рассмотренные ранее стеки, очереди и деки могут быть представлены не только в виде векторов с переменной и ограниченной длиной, но также и связными линейными списками, причем в этом случае для стека, очереди или дека всякий раз резервируется такой объем памяти, который необходим для текущего числа элементов структуры. Представление очереди с помощью линейного связного списка позволяет достаточно просто обеспечивать любые желаемые дисциплины включения элементов в очередь и исключения их из очереди и достигать высокой гибкости в управлении памятью. По этой причине очереди с трудно предсказуемым числом элементов или очереди со специальными дисциплинами обработки, возникающие в операционных системах ВС при имитационном моделировании систем массового обслуживания, в задачах управления ресурсами и других задачах, часто реализуются с помощью линейных связных списков. Не следует, однако, забывать, что в связной списковой структуре прямой, или вычисляемый, доступ к элементу невозможен. Вместо этого приходится последовательно проходить по цепочке элементов до тех пор, пока не будет достигнут заданный элемент или пока не будет обнаружено, что желаемого элемента в списке нет. Вследствие такого последовательного доступа время обращения к элементу связного списка (линейного или нелинейного) обычно намного больше времени доступа к элементу любой другой структуры, имеющей последовательное, или векторное, представление в машинной памяти.