VEREM
A verem olyan adatsorozat, amelynek csak az egyik végére (tetejére) tehetünk új elemet, És csak erről a vehetünk el. Azaz az utolsónak bekerült elemet vehetjük ki elsőként. Ha egy üres verembe berakjuk az 1, 6, 3 számokat ilyen sorrendben, akkor először a 3, azután a 6, végül az 1 vehető ki. Ha még egy elemet ki akarunk venni, a verem-eljárás hibát jelez.
Last In First Out Felhasználásuk: - rendező pályaudvarok holt vágányai - zsákutca - rendező pályaudvarok holt vágányai - kifejezések lengyel formája (műveletet az operandusai mögé helyezzük) - zsák - stb.
Műveletek: Üres : Verem Üres? (Verem) : Logikai Tele? (Verem) : Logikai Tető (Verem) : Elem Verembe (Verem, Elem) : Verem Veremből (Verem) : (Verem x Elem)
Szükségünk van egy TETEJE változóra, mely a legfelső elemre mutat. Elemet az TETEJE helyről kell kivenni, új elemet, pedig egy TETEJE melletti üres helyre kell berakni.
Láncolt ábrázolás Modul Verem (Típus ElemTíp) Reprezentáció Típus VeremElem = Rekord ( érték : ElemTíp alatta : VeremElemMut) Változó teteje : VeremElemMut hiba : Logikai
Implementáció Eljárás Üres (Változó v : Verem) teteje := sehova hiba := Hamis Eljárás vége Függvény Üres? (Konstans v : Verem) : Logikai Üres := (teteje = sehova) Függvény vége
Függvény Tele? (Konstans v : Verem) : Logikai Változó vv : VeremElemMut Lefoglal (vv) Ha vv = sehova akkor Tele? := Igaz különben Tele? := Hamis Felszabadít (vv) Függvény vége
Eljárás Verembe (Változó v : Verem, Konstans e : ElemTíp) Változó új : VeremElemMut Lefoglal (új) Ha új ≠ sehova akkor VeremElem (új) := VeremElem (e,teteje) teteje := új különben hiba:= Igaz Elágazás vége Eljárás vége
Eljárás Veremből (Változó v : Verem, e : ElemTíp) újteteje : VeremElemMut Ha teteje ≠ sehova akkor e := VeremElem (teteje). érték újteteje := VeremElem (teteje). alatta Felszabadít (teteje) teteje:= újteteje különben hiba:= Igaz Elágazás vége Eljárás vége
Függvény Hibás? (Változó v : Verem) : Logikai Hibás? := hiba hiba := hamis Függvény vége Inicializálás teteje := sehova hiba:= Hamis Modul vége
Folytonos (ciklikus) ábrázolás Modul Verem (Típus ElemTíp) Reprezentáció Típus VeremTíp = Tömb ( 1..MaxMély : ElemTíp) Változó verem : VeremTíp teteje : 0..MaxMély mély : 0..MaxMély hiba : Logikai
Implementáció Eljárás Üres (Változó v : VeremTíp) teteje:= 0 mély:= 0 hiba:= Hamis Eljárás vége Függvény Üres? (Konstans v : VeremTíp) : Logikai Üres := (mély=0) Függvény vége
Függvény Tele? (Konstans v : VeremTíp) : Logikai Tele? := (Mély=MaxMély) Függvény vége Függvény Tető (Változó v : VeremTíp) : ElemTíp Ha mély ≠ 0 akkor Tető := v (teteje) különben hiba := Igaz
Eljárás Verembe (Változó v : Verem, Konstans e : ElemTíp) Ha mély < MaxMély akkor v(teteje) := e mély := mély+1 teteje := teteje+1 különben hiba:= Igaz Elágazás vége Eljárás vége
Eljárás Veremből (Változó v : Verem, e : ElemTíp) Ha mély > 0 akkor e := v (teteje) mély := mély-1 teteje := teteje – 1 különben hiba:= Igaz Elágazás vége Eljárás vége
Függvény Hibás? (Változó v : Verem) : Logikai Hibás? := hiba hiba := hamis Függvény vége Inicializálás teteje := 0 hossz := 0 hiba:= Hamis Modul vége