Î÷åðåäüþ íàçûâàåòñÿ äèíàìè÷åñêàÿ ñòðóêòóðà äàííûõ, äîáàâëåíèå êîì-
ïîíåíòû â êîòîðóþ ïðîèçâîäèòñÿ â îäèí êîíåö, à âûáîðêà îñóùåñòâëÿåòñÿ
ñ äðóãîãî êîíöà. Î÷åðåäü ðàáîòàåò ïî ïðèíöèïó:
FIFO (First-In, First-Out) -
ïîñòóïèâøèé ïåðâûì, îáñëóæèâàåòñÿ ïåðâûì.
Äëÿ ôîðìèðîâàíèÿ î÷åðåäè è ðàáîòû ñ íåé íåîáõîäèìî èìåòü òðè ïåðå-
ìåííûå òèïà óêàçàòåëü, ïåðâàÿ èç êîòîðûõ îïðåäåëÿåò íà÷àëî î÷åðåäè,
âòîðàÿ - êîíåö î÷åðåäè, òðåòüÿ - âñïîìîãàòåëüíàÿ.
Îïèñàíèå êîìïîíåíòû î÷åðåäè è ïåðåìåííûõ òèïà óêàçàòåëü äàäèì ñëå-
äóþùèì îáðàçîì:
type
PComp=^Comp;
Comp=record
D:T;
pNext:PComp
end;
var
pBegin, pEnd, pAux: PComp;
ãäå pBegin - óêàçàòåëü íà÷àëà î÷åðåäè, pEnd - óêàçàòåëü êîíöà î÷åðå-
äè, pAux - âñïîìîãàòåëüíûé óêàçàòåëü.
Òèï Ò îïðåäåëÿåò òèï äàííûõ êîìïîíåíòû î÷åðåäè.
Íà÷àëüíîå ôîðìèðîâàíèå î÷åðåäè âûïîëíÿåòñÿ ñëåäóþùèìè îïåðàòîðàìè:
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ»
New(pBegin); º *ÄĺÄÄÄ¿ º º º º
ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ÈÍÍÍÍͼ
pBegin ÀÄÄ>º º pEnd
ÈÍÍÍÍͼ
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ»
pBegin^.pNext:=NIL; º *ÄĺÄÄÄ¿ º º º º
ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ÈÍÍÍÍͼ
pBegin ÀÄÄ>º NIL º pEnd
ÈÍÍÍÍͼ
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ»
pBegin^.D:=D1; º *ÄĺÄÄÄ¿ º D1 º º º
ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ÈÍÍÍÍͼ
pBegin ÀÄÄ>º NIL º pEnd
ÈÍÍÍÍͼ
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ»
pEnd:=pBegin; º *ÄĺÄÄÄ¿ º D1 º ÚÄÄĺÄÄ* º
ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ
pBegin ÀÄÄ>º NIL º<ÄÄÙ pEnd
ÈÍÍÍÍͼ
Äîáàâëåíèå êîìïîíåíòû â î÷åðåäü ïðîèçâîäèòñÿ â êîíåö î÷åðåäè:
New(pAux);
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ»
º *ÄĺÄÄÄ¿ º D1 º ÚÄÄĺÄÄ* º º º ÚÄÄĺÄÄ* º
ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ
pBegin ÀÄÄ>º NIL º<ÄÄÙ pEnd º º<ÄÄÙ pAux
ÈÍÍÍÍͼ ÈÍÍÍÍͼ
pAux^.pNext:=NIL;
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ»
º *ÄĺÄÄÄ¿ º D1 º ÚÄÄĺÄÄ* º º º ÚÄÄĺÄÄ* º
ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ
pBegin ÀÄÄ>º NIL º<ÄÄÙ pEnd º NIL º<ÄÄÙ pAux
ÈÍÍÍÍͼ ÈÍÍÍÍͼ
pBegin^.pNext:=pAux;
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ»
º *ÄĺÄÄÄ¿ º D1 º ÚÄÄĺÄÄ* º º º ÚÄÄĺÄÄ* º
ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ
pBegin ÀÄÄ>º * º<ÄÄÙ pEnd º NIL º<ÄÄÙ pAux
ÈÍÍÍÍͼ ÈÍÍÍÍͼ
³ ^
³ ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
pEnd:=pAux;
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ»
º *ÄĺÄÄÄ¿ º D1 º º *ÄĺÄÄÄ¿ º º ÚÄÄĺÄÄ* º
ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ
pBegin ÀÄÄ>º * º pEnd ÀÄÄ>º NIL º<ÄÄÙ pAux
ÈÍÍÍÍͼ ÈÍÍÍÍͼ
³ ^
³ ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
pEnd^.D:=D2;
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ»
º *ÄĺÄÄÄ¿ º D1 º º D2 º ÚÄÄĺÄÄ* º
ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ
pBegin ÀÄÄ>º *ÄĺÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>º NIL º<ÄÄÙ pEnd
ÈÍÍÍÍͼ ÈÍÍÍÍͼ
Äîáàâëåíèå ïîñëåäóþùèõ êîìïîíåíò ïðîèçâîäèòñÿ àíàëîãè÷íî.
Âûáîðêà êîìïîíåíòû èç î÷åðåäè îñóùåñòâëÿåòñÿ èç íà÷àëà î÷åðåäè,
îäíîâðåìåííî êîìïîíåíòà èñêëþ÷àåòñÿ èç î÷åðåäè. Ïóñòü â ïàìÿòè ÝÂÌ
ñôîðìèðîâàíà î÷åðåäü, ñîñòîÿùàÿ èç òðåõ ýëåìåíòîâ:
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ»
º *ÄĺÄÄÄ¿ º D1 º º D2 º º D3 º ÚÄÄĺÄÄ* º
ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ºÍÍÍÍͺ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ
pBegin ÀÄÄ>º *ÄĺÄÄÄÄÄÄ>º *ÄĺÄÄÄÄÄÄ>º NIL º<ÄÄÙ pEnd
ÈÍÍÍÍͼ ÈÍÍÍÍͼ ÈÍÍÍÍͼ
Âûáîðêà êîìïîíåíòû âûïîëíÿåòñÿ ñëåäóþùèìè îïåðàòîðàìè:
D1:=pBegin^.D;
pBegin:=pBegin^.pNext;
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ»
º *ÄĺÄÄÄ¿ º D1 º º D2 º º D3 º ÚÄÄĺÄÄ* º
ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ºÍÍÍÍͺ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ
pBegin ³ º º ÚÄÄ>º *ÄĺÄÄÄÄÄÄ>º NIL º<ÄÄÙ pEnd
³ ÈÍÍÍÍͼ ³ ÈÍÍÍÍͼ ÈÍÍÍÍͼ
³ ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Ïðèìåð. Ñîñòàâèòü ïðîãðàììó, êîòîðàÿ ôîðìèðóåò î÷åðåäü, äîáàâëÿåò
â íåå ïðîèçâîëüíîå êîëè÷åñòâî êîìïîíåíò, à çàòåì ÷èòàåò âñå êîìïîíåí-
òû è âûâîäèò èõ íà ýêðàí äèñïëåÿ.  êà÷åñòâå äàííûõ âçÿòü ñòðîêó ñèì-
âîëîâ. Ââîä äàííûõ - ñ êëàâèàòóðû äèñïëåÿ, ïðèçíàê êîíöà ââîäà -
ñòðîêà ñèìâîëîâ END.
Program QUEUE;
uses Crt;
type
Alfa= String[10];
PComp= ^Comp;
Comp= record
sD:Alfa;
pNext:PComp
end;
var
pBegin, pEnd: PComp;
sC: Alfa;
Procedure CreateQueue(var pBegin,pEnd: PComp; var sC: Alfa);
begin
New(pBegin);
pBegin^.pNext:=NIL;
pBegin^.sD:=sC;
pEnd:=pBegin
end;
Procedure AddQueue(var pEnd:PComp; var sC:Alfa);
var pAux: PComp;
begin
New(pAux);
pAux^.pNext:=NIL;
pEnd^.pNext:=pAux;
pEnd:=pAux;
pEnd^.sD:=sC
end;
Procedure DelQueue(var pBegin: PComp; var sC: Alfa);
begin
sC:=pBegin^.sD;
pBegin:=pBegin^.pNext
end;
begin
Clrscr;
writeln(' ÂÂÅÄÈ ÑÒÐÎÊÓ ');
readln(sC);
CreateQueue(pBegin,pEnd,sC);
repeat
writeln(' ÂÂÅÄÈ ÑÒÐÎÊÓ ');
readln(sC);
AddQueue(pEnd,sC)
until sC='END';
writeln(' ***** ÂÛÂÎÄ ÐÅÇÓËÜÒÀÒÎÂ *****');
repeat
DelQueue(pBegin,sC);
writeln(sC);
until pBegin=NIL
end.