- •Динамические структуры данных Классификация структур данных
- •Понятие о динамической памяти
- •Адреса и указатели
- •Описание и состояния указателей
- •Работа с указателями в программе
- •Объявление указателя
- •Выделение памяти
- •Работа с информацией (разыменование)
- •Работа с адресом
- •Освобождение памяти
- •Особенности динамических данных
- •Связанные динамические структуры
- •Организация взаимосвязей в связанных динамических данных
- •Основные типы связанных динамических структур
- •Работа с очередью
- •Работа со стеком
- •Создание стека
- •Добавление элемента
- •Удаление элемента стека
Освобождение памяти
Процедура dispose(указатель). Освобождает заранее выделенный участок памяти, адрес первого байта которого является значением указателя. При этом указатель переходит в неопределенное состояние.
Пример 3.
var
a,b:^integer;{объявление указателей}
begin
{ выделение памяти под указатели a,b }
new(a); new(b);
{ помещаем значения в выделенную память по адресу, содержащемуся в указателях }
a^ :=10;
b^ :=2;
{ вывод суммы присвоенных значений }
writeln('сумма = ',a^ + b^);
{освобождение памяти от динамических данных}
dispose(a);
dispose(b);
end.
При этом перед освобождением памяти состояние такое:
a |
адрес 1 |
b |
адрес 2 |
a^ |
10 |
b^ |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
После операции dispose(a) состояние :
a |
? |
b |
адрес 2 |
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
После операции dispose(b) состояние :
a |
? |
b |
? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Особенности динамических данных
Как было сказано выше, особые свойства данных, на которые ссылаются указатели, проявляются в том, что эти данные могут «появляться» и «исчезать» во время работы программы. Поэтому такие данные и называются динамическими.
Особенности динамических данных:
Для доступа к динамическим данным в программе нужно объявить пользовательский указатель на тип, соответствующий типу этих данных. (объявление указателя см.выше)
Перед использованием динамических данных необходимо выделить память их для размещения. Для этого используются специальная процедура NEW, результатом которой является адрес выделенного участка памяти, помещенный в объявленный ранее указатель.
После использования динамических данных их нужно удалить из памяти - освободить память. Для этого используются специальная процедура Dispose/
Связанные динамические структуры
В рассмотренных выше примерах создавались несвязанные динамические данные. Но наибольшее применение при написании программ находят связанные динамические данные. Они позволяют создавать структуры данных различной конфигурации. Это достигается тем, что в любой момент времени работы программы:
1) можно выделять и освобождать память под элементы динамической структуры;
2) можно установить или удалить связь между двумя любыми элементами структуры.
