1/5. lecke: Verem és sor

 2009.11.02. 02:02

A sor


A sor olyan sorozat, amelynek az egyik végére lehet tenni új elemeket, a másik végéről pedig el lehet venni őket. Amit először tettem be, azt veszem ki először. Angolul First In First Out (FIFO). Így működik pl a billentyűzet puffere.

A sor jellegű adatszervezés során általában ugyanolyan típusú adatokat használunk.

A HOVA azt mutatja meg, hogy melyik helyre rakhatunk elemet, a HONNAN pedig, hogy hol van a következő kivehető elem.


Műveletek:

 

Eljárás (Üresre állítás)

              HOVA:=1 ; HONNAN:=1

Eljárás vége.        /Ha  HOVA=HONNAN akkor a sor üres./

 

Eljárás (SORBA(x))

            Ha HOVA>N akkor HIBA(„betelt a sor”)

              különben S(HOVA):=x ; HOVA:=HOVA+1                     /x az új elem/

              Ha vége

            Eljárás vége.

 

Problémák: csak egyszer megyünk végig a soron, ezért nem veszi észre ha berak-kivesz, hogy vannak szabad helyek. Nem hatékony. Ez kiküszöbölhető ha léptetjük a tömböt (lassú) vagy, ha új változót vezetünk be, ami a sor elemszámát tartalmazza (db). Javítva:

 

Eljárás (SORBA(x))

Ha db>=MAX akkor HIBA

Különben

            S(HOVA):=S(HONNAN);

db:=db+1;

Ha (HOVA=MAX) akkor HOVA:=1 (visszaáll az elejére)

 

     Eljárás(SORBÓL(x))

       Ha HONNAN=HOVA akkor HIBA(„üres a sor”)

         különben x:=S(HONNAN) ; HONNAN:=HONNAN-1

       Ha vége

            Eljárás vége.

  

Eljárás(SORBÓL(x))

Ha db=0 akkor üres

Különben

            MIBE:=S(HONNAN)

            MIBE:=MIBE-1;

Ha (HONNAN=MAX) akkor HONNAN:=1 (visszaáll az elejére)

 

A verem

 

A verem olyan sorozat, amelynek csak az egyik végét tudjuk kezelni, oda tehetünk be új elemet és onnan vehetünk ki elemet. Amit legutoljára tettünk be, azt kell kivenni először. Ez angolul Last In First Out (LIFO). A vele végezhető műveletek: a verem tetejére való ráhelyezés és a verem tetejéről való levétel. Megszakítások kezelésekor, és eljáráshívások visszatérési címének tárolásakor használjuk.


PUSH(x): tegyünk be adott elemet

POP(x):  kiveszünk egy elemet úgy hogy fizikailag is kikerüljön

TOP(x):  A verem tetején lévő elem vizsgálata

V:       array[1..max] of integer; (a verem tömbös megvalósítása)

VM:       A veremmutató (ha a következő szabad helyet mutatja, akkor a leghatékonyabb)

Ha VM=1, a verem üres. Minden beírás előtt meg kell nézni, hogy nem fogunk-e túlcsordulni.

 

Műveletek:

 

Eljárás (TOP(x)) (Üresre állítás)

  VM:=1

Eljárás vége.

 

Eljárás (PUSH(x))

            Ha VM>max akkor HIBA („betelt a verem”)

    különben V(VM):=x ; VM:=VM+1 (berakjuk az új elemet(x) és növeljük a veremmutató értékét)

            Ha vége

Eljárás vége.

 

Eljárás (POP(x))

            Ha VM:=1 akkor HIBA („üres a verem”)

              különben VM:=VM-1 ; x:=V(VM) (csökkentjük a mutatót, majd kivesszük az elemet)

            Ha vége

Eljárás vége.

A bejegyzés trackback címe:

https://delphi-learning.blog.hu/api/trackback/id/tr251601216

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása