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

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 выводится на печать.

15