
- •Динамические структуры данных Классификация структур данных
- •Понятие о динамической памяти
- •Адреса и указатели
- •Описание и состояния указателей
- •Работа с указателями в программе
- •Объявление указателя
- •Выделение памяти
- •Работа с информацией (разыменование)
- •Работа с адресом
- •Освобождение памяти
- •Особенности динамических данных
- •Связанные динамические структуры
- •Организация взаимосвязей в связанных динамических данных
- •Основные типы связанных динамических структур
- •Работа с очередью
- •Работа со стеком
- •Создание стека
- •Добавление элемента
- •Удаление элемента стека
Динамические структуры данных Классификация структур данных
Структуры данных вместе с алгоритмами обработки являются основными составными частями создаваемых программ. Используемые в программировании данные можно разделить на две большие группы: данные статической структуры и данные динамической структуры.
Данные статической структуры – это такие данные, взаимное расположение и взаимосвязи элементов которых все время работы программы остаются постоянными. Данные статической структуры могут быть простыми (скалярными) и составными (агрегативными), которые формируются из простых структур по какому-либо закону.
Простые: арифметические, символьный, булевские, указательный.
Составные: однородные (массивы, строки, множества) и неоднородные (записи, объекты).
Данные динамической структуры – это данные, внутреннее строение которых формируется по какому-либо закону, причем количество элементов этих данных, их взаиморасположение и взаимосвязи могут изменяться во время работы программы. Поэтому их называют динамическими структурами. Другими словами, динамические данные имеют особые свойства: они могут «появляться» и «исчезать» во время работы программы. Данные динамической структуры применяются тогда, когда заранее не известно количество памяти, которое понадобится программе. Например, при работе с массивами необходимо точно указать его размер (например, 100) и тогда программа может обрабатывать массивы, длины которых лежат в диапазоне от 0 до указанного размера (до 100). Если вместо массива использовать динамическую структуру, то размер ее может быть ограничен только размером памяти компьютера, а не особенностями объявления массивов.
К
данным динамической структуры относятся
файлы, несвязные и связные
динамические данные.
Понятие о динамической памяти
Все переменные, объявленные в программе, размещаются в одной непрерывной области оперативной памяти, которая называется сегментом данных. Длина сегмента данных определяется архитектурой микропроцессоров 80x86 и составляет 65536 байт (64 кб). При обработке больших массивов данных этого сегмента может не хватить. Выходом из положения может служить так называемая динамическая память.
Динамическая память (в Паскале - куча) - это часть оперативной памяти компьютера, предоставляемая программе при её работе за вычетом сегмента данных (64 Кб), сегмента стека (16 Кб), памяти, используемой системными и резидентными программами, и собственно телом самой исполняемой программы. Размер динамической памяти определяется всей доступной памятью ПК и по умолчанию составляет 200 - 400кб, причем этот размер можно устанавливать из среды или из самой программы специальными директивами компилятора. Куча первоначально всегда свободна и заполняется от своих нижних (младших) адресов.
Структура памяти во время выполнения программы на языке Паскаль:
С |
Куча |
|
Программа |
Системная область |
HeapEnd – конец кучи
HeapPtr – начало свободной области
HeapOrg – начало кучи
Младшие адреса
Динамическая память предоставляет программисту наибольшую гибкость в управлении памятью, но требует весьма существенной поддержки в ходе выполнения программы, что приводит к снижению производительности, причём существенно большему, чем при использовании автоматической памяти.