
исключение – с другой стороны (называемой началом или головой очереди). Те
самые очереди, которые возникают у прилавков и кассс, являются типовым
бытовым примером очереди FIFO.
Основные операции над очередью – это включение и исключение
элементов, определение размера очереди, очистка, не разрушающее чтение.
Очереди строятся на базе линейных списков. Представление очереди с
помощью линейного списка позволяет достаточно просто обеспечить любые
необходимые операции обслуживания очереди. Особенно это удобно, когда
число элементов в очереди сложно предвидеть. Линейные списки также
находят широкое применение в приложениях, где непредсказуемы требования к
размеру памяти, необходимой для сохранения данных; имеется большое число
сложных операций над данными, особенно включений и исключений.
8.27.11. Связанные линейные списки
Списком называется упорядоченное множество, состоящее из переменного
числа элементов, к которым применяемы операции включениня и исключения.
Список, отражающий отношения соседства между элементами, называется
линейным. Если ограничения на длину списка не допускаются, то список
представляется в памяти в виде динамичной связанной структуры. Линейные
связанные списки являются наипростешими динамическими структурами
данных. Графически связи в списках удобно изображать с помощью стрелок.
Если компонент не связан ни с каким другим, то в поле указателя записывают
значение которое не указывает ни на один из элементов. Такая ссылка
обозначается специальным именем –
nil.
На рис. 8.96 приведена упрощённая структура односвязного списка. На нём
поле
INF – это информационное поле, которое может включать разнообразные
данные, как встроенных, так и пользовательских типов данных языка Турбо
Паскаль,
NEXT – указатель на следующий элемент списка. Каждый список
должен иметь особый элемент, называемый указателем начала списка или
головой списка, который естественно по формату отличен от других элементов.
В поле указателя последнего элемента списка находится специальный признак
nil, свидетельствующий о конце списка.
8.27.12. Реализация операций над связными линейными
списками
Для рассмотрения программных примеров определим следующие типы
данных:
INF nil
NEXT
INF NEXT
INF NEXT
Рис 8.96. Логическая структура односвязного списка