Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вопросы к экзамену 1-2сем.doc
Скачиваний:
10
Добавлен:
23.09.2019
Размер:
186.88 Кб
Скачать

19.Нелинейные списки. Создание и удаление динамических переменных.

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

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

Статической переменной (статически размещенной) называется описанная явным образом в программе переменная, обращение к ней осуществляется по имени. Место в памяти для размещения статических переменных определяется при компиляции программы.

В отличие от таких статических переменных в программах, написанных на языке BP, могут быть созданы динамические переменные. Основное свойство динамических переменных заключается в том, что они создаются, и память для них выделяется во время выполнения программы. Размещаются динамические переменные в динамической области памяти (heap-области). Доступ к таким переменным осуществляется с помощью указателей и ссылок.

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

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

- С помощью процедур New и Dispose;

- С помощью процедур Get Mem и FreeMem(p, size); для нетипизированных указателей.

Процедура New(p) создает новую динамическую переменную того типа, на который ссылается указатель, и устанавливает значение переменной Р таким образом, чтобы оно указывало на новую динамическую переменную.Например:

new (р1); new (р2); new(pmas);

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

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

Dispose (р);

P:=nil;

Для работы с нетипизированными указателями испол. ф-и:

GetMem(p,size) – резервирует фрагмент динамической памяти требуемого размера.

Р - нетипизированный указатель;

Size - размер в байтах.

FreeMem( р, size) – освобождает фрагмент динам. памяти, кот. был ранее зарезервирован за нетипизированным указателем.

При выделении динам. памяти полезными явл. следующие ф-и:

- MemAvail – возвращает общий размер свободной памяти в байтах;

- MaxAvail – возвращает размер наибольшего непрерывного участка свободной памяти.