39. Î÷åðåäè

   Î÷åðåäüþ íàçûâàåòñÿ äèíàìè÷åñêàÿ ñòðóêòóðà äàííûõ, äîáàâëåíèå êîì-

ïîíåíòû â êîòîðóþ ïðîèçâîäèòñÿ â îäèí êîíåö, à âûáîðêà îñóùåñòâëÿåòñÿ

ñ äðóãîãî êîíöà. Î÷åðåäü ðàáîòàåò ïî ïðèíöèïó:

 

        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.