RSS    

   Ðåôåðàò: Îñíîâíûå ïîíÿòèÿ àëãîðèòìè÷åñêîãî ÿçûêà

pBegin    L-->¦ NIL ¦<---    pEnd         ¦ NIL ¦<---     pAux

              L=====-                     L=====-

 pBegin^.pNext:=pAux;

   

ã=====¬       ã=====¬       ã=====¬       ã=====¬       ã=====¬

¦  *--¦---¬   ¦ D1  ¦   ----¦--*  ¦       ¦     ¦   ----¦--*  ¦

L=====-   ¦   ¦=====¦   ¦   L=====-       ¦=====¦   ¦   L=====-

pBegin    L-->¦  *  ¦<---    pEnd         ¦ NIL ¦<---     pAux

              L=====-                     L=====-

                 ¦                           ^

                 ¦                           ¦

                 L----------------------------

 pEnd:=pAux;

ã=====¬       ã=====¬       ã=====¬       ã=====¬       ã=====¬

¦  *--¦---¬   ¦ D1  ¦       ¦  *--¦---¬   ¦     ¦   ----¦--*  ¦

L=====-   ¦   ¦=====¦       L=====-   ¦   ¦=====¦   ¦   L=====-

pBegin    L-->¦  *  ¦        pEnd     L-->¦ NIL ¦<---     pAux

              L=====-                     L=====-

                 ¦                           ^

                 ¦                           ¦

                 L----------------------------

 pEnd^.D:=D2;

   

ã=====¬       ã=====¬                     ã=====¬       ã=====¬

¦  *--¦---¬   ¦ D1  ¦                     ¦ D2  ¦   ----¦--*  ¦

L=====-   ¦   ¦=====¦                     ¦=====¦   ¦   L=====-

pBegin    L-->¦  *--¦-------------------->¦ NIL ¦<---    pEnd

              L=====-                     L=====-

                                             

                                             

   Äîáàâëåíèå ïîñëåäóþùèõ êîìïîíåíò ïðîèçâîäèòñÿ àíàëîãè÷íî.

   

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

îäíîâðåìåííî êîìïîíåíòà èñêëþ÷àåòñÿ èç î÷åðåäè.  Ïóñòü â  ïàìÿòè  ÝÂÌ

ñôîðìèðîâàíà î÷åðåäü, ñîñòîÿùàÿ èç òðåõ ýëåìåíòîâ:

ã=====¬       ã=====¬       ã=====¬       ã=====¬       ã=====¬

¦  *--¦---¬   ¦ D1  ¦       ¦ D2  ¦       ¦ D3  ¦   ----¦--*  ¦

L=====-   ¦   ¦=====¦       ¦=====¦       ¦=====¦   ¦   L=====-

pBegin    L-->¦  *--¦------>¦  *--¦------>¦ NIL ¦<---     pEnd

              L=====-       L=====-       L=====-

                                                                                                                                                                                                                                                               

   Âûáîðêà êîìïîíåíòû âûïîëíÿåòñÿ ñëåäóþùèìè îïåðàòîðàìè:

 D1:=pBegin^.D;

 pBegin:=pBegin^.pNext;

   

ã=====¬       ã=====¬       ã=====¬       ã=====¬       ã=====¬

¦  *--¦---¬   ¦ D1  ¦       ¦ D2  ¦       ¦ D3  ¦   ----¦--*  ¦

L=====-   ¦   ¦=====¦       ¦=====¦       ¦=====¦   ¦   L=====-

pBegin    ¦   ¦     ¦   --->¦  *--¦------>¦ NIL ¦<---     pEnd

          ¦   L=====-   ¦   L=====-       L=====-

          ¦             ¦

          L--------------

   

   Ïðèìåð. Ñîñòàâèòü ïðîãðàììó,  êîòîðàÿ ôîðìèðóåò î÷åðåäü, äîáàâëÿåò

â íåå ïðîèçâîëüíîå êîëè÷åñòâî êîìïîíåíò, à çàòåì ÷èòàåò âñå êîìïîíåí-

òû è âûâîäèò èõ íà ýêðàí äèñïëåÿ.  êà÷åñòâå äàííûõ âçÿòü ñòðîêó ñèì-

âîëîâ. Ââîä    äàííûõ  - ñ êëàâèàòóðû äèñïëåÿ,  ïðèçíàê êîíöà ââîäà -

ñòðîêà ñèìâîëîâ 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.

   

   

40.   Ë È Í Å É Í Û Å   Ñ Ï È Ñ Ê È

   

    ñòåêè èëè î÷åðåäè êîìïîíåíòû ìîæíî äîáàâëÿòü òîëüêî  â  êàêîé  -

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

íåíò.

   Ñâÿçíûé (ëèíåéíûé) ñïèñîê ÿâëÿåòñÿ ñòðóêòóðîé äàííûõ, â ïðîèçâîëü-

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

ñÿ îòòóäà.

   Êàæäàÿ êîìïîíåíòà ñïèñêà îïðåäåëÿåòñÿ êëþ÷îì.  Îáû÷íî êëþ÷ -  ëèáî

÷èñëî, ëèáî  ñòðîêà ñèìâîëîâ. Êëþ÷ ðàñïîëàãàåòñÿ â ïîëå äàííûõ êîìïî-

íåíòû, îí ìîæåò çàíèìàòü êàê îòäåëüíîå ïîëå çàïèñè, òàê è áûòü ÷àñòüþ

ïîëÿ çàïèñè.

   Îñíîâíûå îòëè÷èÿ ñâÿçíîãî ñïèñêà îò ñòåêà è î÷åðåäè ñëåäóþùèå:

   -äëÿ ÷òåíèÿ äîñòóïíà ëþáàÿ êîìïîíåíòà ñïèñêà;

   -íîâûå êîìïîíåíòû ìîæíî äîáàâëÿòü â ëþáîå ìåñòî ñïèñêà;

   -ïðè ÷òåíèè êîìïîíåíòà íå óäàëÿåòñÿ èç ñïèñêà.

   Íàä ñïèñêàìè âûïîëíÿþòñÿ ñëåäóþùèå îïåðàöèè:

   -íà÷àëüíîå ôîðìèðîâàíèå ñïèñêà (çàïèñü ïåðâîé êîìïîíåíòû);

   -äîáàâëåíèå êîìïîíåíòû â êîíåö ñïèñêà;

   -÷òåíèå êîìïîíåíòû ñ çàäàííûì êëþ÷îì;

   -âñòàâêà êîìïîíåíòû â çàäàííîå ìåñòî ñïèñêà (îáû÷íî  ïîñëå  êîìïî-

íåíòû ñ çàäàííûì êëþ÷îì);

   -èñêëþ÷åíèå êîìïîíåíòû ñ çàäàííûì êëþ÷îì èç ñïèñêà.

   Äëÿ ôîðìèðîâàíèÿ ñïèñêà è ðàáîòû ñ íèì íåîáõîäèìî èìåòü ïÿòü ïåðå-

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

âòîðàÿ - êîíåö ñïèñêà, îñòàëüíûå- âñïîìîãàòåëüíûå.

   Îïèñàíèå êîìïîíåíòû ñïèñêà è ïåðåìåííûõ òèïà óêàçàòåëü äàäèì  ñëå-

äóþùèì îáðàçîì:

   type

    PComp= ^Comp;

    Comp= record

           D:T;

           pNext:PComp

          end;

   var

    pBegin, pEnd, pCKey, pPreComp, pAux: PComp;

ãäå pBegin - óêàçàòåëü íà÷àëà ñïèñêà, pEnd - óêàçàòåëü  êîíöà ñïèñêà,

pCKey, pPreComp, pAux - âñïîìîãàòåëüíûå óêàçàòåëè.

   Íà÷àëüíîå ôîðìèðîâàíèå ñïèñêà, äîáàâëåíèå êîìïîíåíò â êîíåö ñïèñêà

âûïîëíÿåòñÿ òàê æå, êàê è ïðè ôîðìèðîâàíèè î÷åðåäè.

ã=====¬     ã=====¬    ã=====¬       ã=====¬    ã=====¬    ã=====¬

¦  *--¦-¬   ¦ D1  ¦    ¦ D2  ¦       ¦ DN1 ¦    ¦ DN  ¦  --¦--*  ¦

L=====- ¦   ¦=====¦    ¦=====¦       ¦=====¦    ¦=====¦  ¦ L=====-

pBegin  L-->¦  *--¦--->¦  *--¦-....->¦  *--¦--->¦ NIL ¦<--   pEnd

            L=====-    L=====-       L=====-    L=====-

                                                                                                                                                                                                                                                               

   Äëÿ ÷òåíèÿ  è âñòàâêè êîìïîíåíòû ïî êëþ÷ó íåîáõîäèìî âûïîëíèòü ïî-

èñê êîìïîíåíòû ñ çàäàííûì êëþ÷îì:

   

  pCKey:=pBegin;

  while (pCKey<>NIL) and (Key<>pCKey^.D) DO

   pCKey:=pCKey^.pNext;

  

Çäåñü Key - êëþ÷, òèï êîòîðîãî ñîâïàäàåò ñ òèïîì äàííûõ êîìïîíåíòû.

   Ïîñëå âûïîëíåíèÿ  ýòèõ îïåðàòîðîâ óêàçàòåëü pÑKey áóäåò îïðåäåëÿòü

êîìïîíåíòó ñ çàäàííûì êëþ÷îì èëè òàêàÿ êîìïîíåíòà íå áóäåò íàéäåíà.

   Ïóñòü pCKey îïðåäåëÿåò êîìïîíåíòó ñ çàäàííûì êëþ÷îì. Âñòàâêà íîâîé

êîìïîíåíòû âûïîëíÿåòñÿ ñëåäóþùèìè îïåðàòîðàìè:

   

 New(pAux);               ã===¬

 pAux^.D:= DK1;        ---¦-* ¦

                       ¦  L===-

                       ¦  pCKey

                       ¦

ã===¬     ã===¬      ã===¬     ã===¬      ã===¬     ã===¬

¦ *-¦--¬  ¦D1 ¦      ¦Key¦     ¦KK1¦      ¦DN ¦  ---¦-* ¦

L===-  ¦  ¦===¦      ¦===¦     ¦===¦      ¦===¦  ¦  L===-

pBegin L->¦ *-¦-...->¦ *-¦---->¦ *-¦-...->¦NIL¦<--  pEnd

          L===-      L===-     L===-      L===-

                                                                                                                                                                                                                                                               

   

                                           ã===¬     ã===¬

                                           ¦DK1¦  ---¦-* ¦

                                           ¦===¦  ¦  L===-

                                           ¦   ¦<--   pAux

                                           L===-

   

 pAux^.pNext:=pCKey^.pNext;

 pCKey^.pNext:=pAux;

                                        

                          ã===¬

                       ---¦-* ¦

                       ¦  L===-

                       ¦  pCKey

                       ¦

ã===¬     ã===¬      ã===¬     ã===¬      ã===¬     ã===¬

¦ *-¦--¬  ¦D1 ¦      ¦Key¦     ¦KK1¦      ¦DN ¦  ---¦-* ¦

L===-  ¦  ¦===¦      ¦===¦     ¦===¦      ¦===¦  ¦  L===-

pBegin L->¦ *-¦-...->¦ * ¦     ¦ *-¦-...->¦NIL¦<--  pEnd

          L===-      L===-     L===-      L===-

                       ¦         ^

                       ¦         ¦          ã===¬     ã===¬

                       ¦         ¦          ¦DK1¦  ---¦-* ¦

                       ¦         L----------¦===¦  ¦  L===-

                       L------------------->¦-* ¦<--   pAux

                                            L===-

   

    Äëÿ óäàëåíèÿ êîìïîíåíòû ñ çàäàííûì êëþ÷îì íåîáõîäèìî ïðè ïîèñêå

íóæíîé êîìïîíåíòû ïîìíèòü àäðåñ ïðåäøåñòâóþùåé:

  pCKey:=pBegin;

  while (pCKey<>NIL) and (Key<>pCKey^.D) do

   begin

    pPreComp:=pCKey;

    pCKey:=pCKey^.pNext

   end;

   

Çäåñü óêàçàòåëü pCKey îïðåäåëÿåò êîìïîíåíòó ñ çàäàííûì êëþ÷îì, óêàçà-

òåëü pPreComp ñîäåðæèò àäðåñ ïðåäèäóùåé êîìïîíåíòû.

   

   Óäàëåíèå êîìïîíåíòû ñ êëþ÷îì Key âûïîëíÿåòñÿ îïåðàòîðîì:

 pPreComp^.pNext:=pCKey^.pNext;

   

                    pPreComp   pCKey

                     ã===¬     ã===¬

                     ¦ * ¦     ¦ * ¦

                     L===-     L===-

                       ¦         ¦

                       ¦         ¦

                       ¦         ¦

ã===¬     ã===¬      ã===¬     ã===¬    ã===¬      ã===¬     ã===¬

¦ *-¦--¬  ¦D1 ¦      ¦KK1¦     ¦Key¦    ¦KK2¦      ¦DN ¦  ---¦-* ¦

L===-  ¦  ¦===¦      ¦===¦     ¦===¦    ¦===¦      ¦===¦  ¦  L===-

pBegin L->¦ *-¦-...->¦ *-¦-¬   ¦ *-¦--->¦ *-¦-...->¦NIL¦<--   pEnd

          L===-      L===- ¦   L===-    L===-      L===-

                           ¦              ^

                           ¦              ¦

                           L---------------

                                                                                                                                                                                                                                                               

   Ïðèìåð. Ñîñòàâèòü ïðîãðàììó, êîòîðàÿ ôîðìèðóåò ñïèñîê, äîáàâëÿåò â

íåãî ïðîèçâîëüíîå êîëè÷åñòâî êîìïîíåíò,  âûïîëíÿåò âñòàâêó è óäàëåíèå

êîìïîíåíòû ïî êëþ÷ó,  à çàòåì ÷èòàåò è âûâîäèò âåñü ñïèñîê  íà  ýêðàí

äèñïëåÿ.     êà÷åñòâå äàííûõ âçÿòü ñòðîêó ñèìâîëîâ.  Ââîä äàííûõ - ñ

êëàâèàòóðû äèñïëåÿ, ïðèçíàê êîíöà ââîäà - ñòðîêà ñèìâîëîâ END.

 Program LISTLINKED;

  uses Crt;

  type

   Alfa= String[10];

   PComp= ^Comp;

   Comp= record

          sD:Alfa;

          pNext:PComp

         end;

  var

   pBegin, pEnd, pAux, pCKey, pPreComp: PComp;

   sC, sKey: Alfa;

   bCond: Boolean;

  Procedure CreateLL(var pBegin,pEnd: PComp; var sC: Alfa);

   begin

    New(pBegin);

    pBegin^.pNext:=NIL;

    pBegin^.sD:=sC;

    pEnd:=pBegin

   end;

  Procedure AddLL(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 Find(var sKey: Alfa; var pBegin,pCKey,pPreComp: PComp;

                 var bCond: Boolean);

   begin

    pCKey:=pBegin;

    while (pCKey <> NIL) and (sKey <> pCKey^.D) do

     begin

      pPreComp:=pCKey;

      pCKey:=pCKey^.pNext

     end;

    if (pCKey = NIL) and (sKey <> pCKey^.sD) then bCond:=FALSE

                                             else bCond:=TRUE

   end;

  Procedure InsComp(var sKey,sC: Alfa);

   var pAux:PComp;

   begin

    Find(sKey,pBegin,pCKey,pPreComp,bCond);

    New(pAux);

    pAux^.sD:=sC;

    pAux^.pNext:=pCKey^.pNext;

    pCKey^.pNext:=pAux

   end;

  Procedure DelComp(var sKey: Alfa; var pBegin: PComp);

   begin

    Find(sKey,pBegin,pCKey,pPreComp,bCond);

    pPreComp^.pNext:=pCKey^.pNext

   end;

  begin

   ClrScr;

   writeln('  ÂÂÅÄÈ ÑÒÐÎÊÓ ');

   readln(sC);

   CreateLL(pBegin,pEnd,sC);

   repeat

    writeln('ÂÂÅÄÈ ÑÒÐÎÊÓ ');

    readln(sC);

    AddLL(pEnd,sC)

   until sC='END';

   writeln(' ***** ÂÛÂÎÄ ÈÑÕÎÄÍÎÃÎ ÑÏÈÑÊÀ *****');

   pAux:=pBegin;

   repeat

    writeln(pAux^.sD);

    pAux:=pAux^.pNext;

   until pAux=NIL;

   writeln;

   writeln('ÂÂÅÄÈ ÊËÞ× ÄËß ÂÑÒÀÂÊÈ ÑÒÐÎÊÈ');

   readln(sKey);

   writeln('ÂÂÅÄÈ ÂÑÒÀÂËßÅÌÓÞ ÑÒÐÎÊÓ');

   readln(sC);

   InsComp(sKey,sC);

   writeln;

   writeln('ÂÂÅÄÈ ÊËÞ× ÓÄÀËßÅÌÎÉ ÑÒÐÎÊÈ');

   readln(sKey);

   DelComp(sKey,pBegin);

   writeln;

   writeln(' ***** ÂÛÂÎÄ ÈÇÌÅÍÅÍÍÎÃÎ ÑÏÈÑÊÀ *****');

    pAux:=pBegin;

    repeat

     writeln(pAux^.sD);

     pAux:=pAux^.pNext;

    until pAux=NIL

  end.


Ñòðàíèöû: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12


Íîâîñòè


Áûñòðûé ïîèñê

Ãðóïïà âÊîíòàêòå: íîâîñòè

Ïîêà íåò

Íîâîñòè â Twitter è Facebook

                   

Íîâîñòè

Îáðàòíàÿ ñâÿçü

Ïîèñê
Îáðàòíàÿ ñâÿçü
Ðåêëàìà è ðàçìåùåíèå ñòàòåé íà ñàéòå
© 2010.