- •Динамическая память и динамические структуры данных
- •Переменные – указатели
- •1 Способ.
- •2 Способ.
- •3 Способ.
- •4 Способ.
- •Динамические переменные
- •Динамические структуры данных
- •Связанные динамические списки
- •Программа формирования динамического списка
- •Ivanov Стек
- •X, y, verh : pstack;
- •Очередь
- •Else Begin
Else Begin
c: = x1^ . data;
u: = x1;
x1 : = x1^ . next;
Dispose(u);
End;
В процедуре ReadO для непустой очереди в статической переменной с сохраняется значение удаленного элемента х1 ^.data. Элемент удаляется из очереди сверху. Для этого переменная-указатель u получает значение х1 – адреса начала очереди; х1 становится значением указателя следующего элемента очереди, т.е. следующий элемент будет теперь в вершине очереди. Из динамической памяти удаляется элемент ранее находившийся в начале очереди, dispose(u).
Задача: создать очередь, содержащую целые числа. Удалить первый элемент из очереди и вывести его значение на экран.
В данной задаче мы будем вводить элементы до тех пор, пока элемент не будет равен нулю.
Program Dinam_Ochered;
Type poc = ^ oc;
Oc = record
Data : integer;
Next : poc;
End;
Var x1, x2: poc;
Digit, first: integer; {х1 – указатель начала очереди, х2 – конца, data и next информационное поле и поле указателя следующего элемента, digit – значение, вводимое с клавиатуры, first – значение первого элемента очереди, который будет напечатан}.
Procedure Write0(var x1, x2: poc; c: integer); {запись}
Var u: poc ;
Begin new(u);
U^. data: = c;
U^. next : = nil;
If x1 = nil then x1: = u
else x2^.next :=u;
x2 : = u;
End;
Procedure ReadO(var x1, x2: poc; var c : integer); {извлечение}
Var u : poc;
Begin
If x1 = nil then writeln (‘ochered pusta’)
else
begin
c: =x1^.data;
u: = x1;
x1: = x1^.next;
Dispose(u);
end;
End;
{основная программа}
Begin
x1 : = nil;
x2 : = nil;
writeln (‘vvedi element’);
readln(digit);
while digit < > 0 do {конец ввода – это ввод нуля}
begin
Write0(x1, x2, digit);
readln(digit);
end;
Read0(x1, x2, first);
writeln(first); {извлечение первого элемента и его печать}
readln;
End.
В программе сначала указатели х1 и х2 получают значение nil – очередь пуста. Далее формируется очередь: с клавиатуры вводятся значения digit пока не будет введен 0 (ноль) и вызывается процедура Write0, добавляющая это число в конец очереди. Затем один раз вызываем процедуру Read0, удаляющую один элемент из очереди, удаленный элемент first выводится на печать.