PDA

Просмотр полной версии : Очереди в Паскале


Andres
27.12.2009, 23:11
И еще одна...

Очередь задана структурой
type Person=......
Key:.....//ключ
Next:.....//адреса следующего элемента
............
var First, Pn: Person;
Очередь существует, количество элементов >=2.
Конечный элемент очереди имеет P^.next=nil,адреса(хвоста) входу очереди - First. Навести фрагмент программы, с помощью которого из очереди будет вытянуто дежурный элемент(последний при организации) и его адрес будет присвоен переменной Pn, выполнить необходимую переадресацию после исключения элемента.
Использовать исключительно описаны переменные.

Retro
28.12.2009, 04:42
Создаешь запись type Person = record .где внутри есть указатель на следующий элемент этого-же типа( объявленный выше). Перед этим создаешь тип - указатель на эту запись(он как раз и описан внутри записи).


type
Pperson = ^Person; // создаем указатель на тип Person;
Person= record
Key: integer //ключ?
Next: Pperson //адреса следующего элемента
end; // закрываем запись.

var
Temp, First, Pn: PPerson;
N,i:byte;
Begin
First := Nil;
writeln('N?');
readln(N);
for i :=1 to N do
begin
Getmem(Temp, Sizeof(Person)); //выделили память.
If First = nil then First:=Temp
else
Pn^.next :=Temp;
Pn :=Temp;

end;
temp^.next=Nill; //последний элемент конечный
End.



Как-то так, писал впопыпах и ночью. Это мы создали очередь, удаление из конца доделай сам.

n1ghtstalker
28.12.2009, 09:18
Создаешь запись type Person = record .где внутри есть указатель на следующий элемент этого-же типа( объявленный выше). Перед этим создаешь тип - указатель на эту запись(он как раз и описан внутри записи).


type
Pperson = ^Person; // создаем указатель на тип Person;
Person= record
Key: integer //ключ?
Next: Pperson //адреса следующего элемента
end; // закрываем запись.

var
Temp, First, Second, Pn: PPerson;
N,i:byte;
Begin
First := Nil;
writeln('N?');
readln(N);
for i :=1 to N do
begin
Getmem(Temp, Sizeof(Person)); //выделили память.
If First = nil then First:=Temp
else
second^.next :=temp;
Second :=temp;

end;
temp^.next=Nill;
End.


Как-то так, писал впопыпах и ночью.

по моему ещё ячейки памяти не выделенны под first,second,temp.