Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DSD_Spiskovye_struktury_dannykh_na_baze_massivo...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.59 Mб
Скачать

2Списковые структуры и файлы

2.1Бестиповые файлы и однонаправленные списки на базе массивов указателей на элементы списка

2.1.1Представление однонаправленных списков массивами указателей

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

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

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

Элементы списка

элемент № 4

элемент № 1

Массив указателей

‑> на эл. № 1

элемент № 3

‑> на эл. № 2

‑> на эл. № 3

элемент № 2

‑> на эл. № 4

Указатель на массив указателей

Рисунок 2.1 – Структура размещения в файле списка на базе массивов указателей

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

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

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

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

Динамические массивы указателей имеют более широкое применение. При таком подходе место в файле для массивов указателей и элементов списка выделяется и освобождается по мере необходимости.

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