Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции(ЯВУ)-Паскаль.doc
Скачиваний:
63
Добавлен:
31.03.2015
Размер:
1.08 Mб
Скачать

10. Динамические структуры данных

    1. Основные определения

По способу распределения памяти данных в программах делятся на статические и динамические. Данные статической структуры – это данные, размещение которых в памяти ЭВМ и взаимосвязи между элементами остаются неизменными во время выполнения программы в области их действия. К данным статической структуры относятся переменные базовых типов, массивы, записи, множества, объявляемые в программе, как локальные, так и глобальные.

Данные динамической структуры – это данные, которые могут размещаться в памяти ЭВМ и удаляться из памяти во время выполнения программы с помощью системных процедур, таких как NewиDispose.

Динамические структуры данных бывают двух видов:

  • несвязанные динамические данные;

  • связанные динамические данные.

Несвязанные динамические данные бывают таких же типов, что и статические. За исключением того, что несвязанные динамические данные размещаются в памяти программистом, а не автоматически. К связанным динамическим данным относятся списки, очереди и стеки; это комбинированные данные, элементы которых связаны между собой с помощью адресных ссылок. Рассмотрим средства языка Паскаль для создания и обработки динамических структур данных.

10.2. Объявление и создание динамических структур данных. Указатели

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

При объявлении динамической переменной в разделе описаний указывается не сама переменная, а указатель (ссылка) на нее, следующим образом:

<имя указателя>: ^ <тип указателя>;

Такое объявление называется объявлением типизированного указателя.

Например,

VarP: ^char; {указатель на переменную типаchar}

Указатель – это переменная, значением которой является адрес другой переменной заданного в объявлении указателя типа.

Рассмотрим пример использования указателя типа char. Указатель объявляется с помощью операции разыменования (^). Использование имени указателя в программе означает обращение к адресу ячейки памяти. Чтобы обратиться к содержимому ячейки, на которую ссылается указатель, требуется после имени указателя поставить символ ‘^’.

P^ - содержимое ячейки, адрес которой является значением указателяP.

P: ^ char P^

Адрес‘*’

Выделение и освобождение памяти под динамические переменные выполняются стандартными процедурами New,Dispose,GetMem,FreeMem,MarkиRelease, соответственно, где

  • ProcedureNew(Varp:pointer); размещает динамическую переменную и возвращает ее адрес как значение указателяp;

  • ProcedureDispose(Varp:pointer); уничтожает динамическую переменную;

  • ProcedureGetMem(Varp:pointer;Size:word); размещает динамическую переменную указанного размера и возвращает ее адрес как значение указателяp;

  • ProcedureFreeMem(Varp:pointer;Size:word); уничтожает динамическую переменную указанного размера;

  • ProcedureMark(Varp:pointer); размещает динамическую переменную и возвращает ее адрес как значение указателяp; эта переменная уничтожается с помощью процедурыRelease;

  • ProcedureRelease(Varp); уничтожает динамическую переменную указанного размера.

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