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

Введение

Методическое пособие предназначено в помощь при выполнении практических заданий и курсового проектирования в части динамических структур данных дисциплин "Программирование" и "Алгоритмы и структуры обработки данных" для специальностей направлений подготовки 6050102 – "Компьютерная инженерия".

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

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

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

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

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

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

В настоящем пособии рассматриваются средства и способы построения динамических структур данных в дисковой памяти компьютера:

  • Приводятся описание базовых средств языка C++ по работе с текстовыми, типизированными и нетипизированными файлами.

  • Показаны способы построения однонапраленных списков в файлах как пример нетривиального использования файлов.

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

1Списковые структуры и динамическая память

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

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

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

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

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

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

элемент № 4

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

элемент № 2

‑> на эл. № 1

‑> на эл. № 2

элемент № 3

‑> на эл. № 3

‑> на эл. № 4

элемент № 1

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

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

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

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

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

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

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