Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АЯП лекции.doc
Скачиваний:
12
Добавлен:
03.12.2018
Размер:
634.37 Кб
Скачать

Динамические переменные.

Динамические переменные – переменные, оперативная память под которые выделяется во время работы программы в специализированной области оперативной памяти – «кучи». При описании таких переменных перед именем типа указывается символ «^»(a:integer; - статич.; b:^integer; - динамическая).

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

Begin

b – указатель

b^ - значение

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

new(b);

b^:=5;

c:=b;

Чтобы обозначить адрес, который ни на что не ссылается, используется

c:=nil;

Графически:

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

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

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

Однонаправленные списки.

Стек и очередь отличаются алгоритмом формирования.

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

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

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

type sp=^el;

el=record;

inf:integer;

next:sp;

end;

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

Формирование списков. Формирование очереди.

n p p

q q

var n,p,q:sp;

x:integer;

begin read(x);

new(p);

p^.nif:=x;

p^.next:=nil;

n:=p;

repeat

new(q);

read(x);

q^.inf:=x;

q^.next:=nil;

p^.next:=q;

p:=q;

until...

Формирование стека.

q q

p p

begin

p:=nil;

repeat

new(q);

read(x);

q^.inf:=x;

q^.next:=p;

p:=q;

until...

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]