Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

A verem. A verem (stack) homogén adatelemek olyan sorozata, amelyen két művelet értelmezett: –Új elem elhelyezése a verem tetejére (push) –Elem kivétele.

Hasonló előadás


Az előadások a következő témára: "A verem. A verem (stack) homogén adatelemek olyan sorozata, amelyen két művelet értelmezett: –Új elem elhelyezése a verem tetejére (push) –Elem kivétele."— Előadás másolata:

1 A verem

2 A verem (stack) homogén adatelemek olyan sorozata, amelyen két művelet értelmezett: –Új elem elhelyezése a verem tetejére (push) –Elem kivétele a verem tetejéről (pop) A legutoljára belerakott dolgot tudjuk legelőször kivenni. (LIFO)

3 A verem megvalósítása Megvalósításához kell: –Egy vektor az elemek tárolására –Két mutató, az egyik a verem alját, a másik a tetejét jelzi Konstans Maxelem=maximális_elemszám Típus Elemszám: tárolandó_elemek_típusa Típus Veremtípus: rekord ( Elem:tömb[1..Maxelem] Elemtípus Alja, Teteje: egész )

4 A verem kezelése A verem inicializálása: Alapállapotban a verem üres Eljárás Veremkezd(Verem:Veremtípus) Verem.Alja:=1 Verem.Teteje:=0 Vége A Teteje mutató jelzi, hogy a verem üres, míg az Alja mutató értéke mindig 1 marad.

5 A verem állapotának lekérdezése A verem üres, ha a Teteje az Alja alá mutat. Ilyenkor a Veremüres igaz értékkel tér vissza. Függvény Veremüres(Verem: Veremtípus): logikai Veremüres:=(Verem.Teteje

6 Új elem elhelyezése a veremben Függvény Verembe (Verem: Veremtípus; Adat: Elemtípus): logikai ha nem VeremTele(Verem) akkor Verem.Teteje:=Verem.Teteje+1 Verem.Elem[Verem.Teteje]:)=Adat Verembe:=igaz különben Verembe:=hamis hvége vége

7 Elem kivétele veremből Függvény Veremből(Verem:Veremtípus; Adat: Elemtípus): logikai ha nem VeremÜres(Verem) akkor Adat:=Verem.Elem[Verem.Teteje] Verem.Teteje:=Verem.Teteje-1 Veremből:=igaz különben Veremből:=hamis hvége vége

8 A sor

9 A sor homogén adatelemek olyan sorozata, amelyen két művelet értelmezett: –Új elem elhelyezése a sor végére (put) –Elem kivétele a sor elejéről (get) A sor mindazon feladatok megoldására alkalmas, amelyekre a sorban állás kifejezésére használhatjuk, vagyis ahol az adatok feldolgozása a keletkezésük sorrendjében történek.

10 A sor megvalósítása Megvalósításához kell: –Egy vektor az elemek tárolására –Két mutató, az egyik a sorban lévő első, a másik az utolsó elemre mutat Konstans Maxelem=maximális_elemszám Típus Elemszám: tárolandó_elemek_típusa Típus Sortípus: rekord ( Elem:tömb[1..Maxelem] Elemtípus Első, Utolsó: egész )

11 A sor kezelése A sor inicializálása: Alapállapotban a sor üres Eljárás Sorkezd(Sor:Sortípus) Sor.Első:=1 Sor.Utolsó:=0 Vége

12 A sor állapotának a lekérdezése Függvény SorÜres (Sor:Sortípus): logikai SorÜres:(=(Sor.Első>Sor.Utolsó) Vége Függvény SorTele (Sor: Sortípus): logikai SorTele:=(Sor.Utolsó=MaxElem) Vége

13 Új elem elhelyezése sorba Függvény Sorba(Sor:Adattípus;Adat:Elemtípus):logikai ha nem SorTele(Sor) akkor Sor.Utolsó:=Sor.Utolsó+1 Sor.Elem[Sor.Utolsó]:=Adat Sorba:=igaz különben Sorba:=hamis hvége vége

14 Elem kivétele sorból Függvény Sorból(Sor:Adattípus;Adat:Elemtípus):logikai ha nem SorÜres(Sor) akkor Adat:=Sor.Elem[Sor.Első] Sor.Első:=Sor.Első+1 Sorból:=igaz különben Sorból:=hamis hvége vége

15 Elem kivétele léptetéssel Az eddig sorkezelő algoritmusok problémái: Ha az Elem[ ] tömb utolsó helyére nem tettünk elemet, akkor további elemek elhelyezésére nincs mód, holott a tömb elején lehetnek üres (felszabadult) helyek Megoldás: Nem engedjük a sor elemeit a tömb vége felé vándorolni. Ezt úgy érhetjük el, hogy egy elem kivételekor nem az Első mutatót léptetjük tovább, hanem a sor megmaradó elemeit és az Utolsó-t vissza. Ezt egy léptető ciklussal érjük el.

16 Függény LéptSorból (Sor:Sortípus; Adat:Elemtípus): logikai változó i:egész ha nem SorÜres(Sor) akkor Adat:=Sor.Elem[Sor.Első] ciklus i:=Sor.Első..Sor.Utolsó-1 ismétel Sor.Elem[i]:=Sor.Elem[i+1] cvége Sor. Utolsó:=Sor.Utolsó-1 LéptSorból:=igaz különben LéptSorból:=hamis vége

17 Ciklus sor Az Elem [ ] tömb végéhez elérve újabb elemeket a tömb elején helyezhetünk el, feltéve, hogy ott már vannak megüresedett helyek.

18 Ciklikus Sor kezelése Ciklikus sor állapotának lekérdezése: Függvény CiklSorÜres(Sor: Sortípus):logikai CiklSorÜres:=(Sor.Utolsó=0) Vége

19 A ciklikus sor kétféle helyzetben telhet meg: Az Elem[ ] tömb első elemétől az utolsóig tart a sor A tömbön körbehalada Utolsó eléri az Első előtti helyet Ki kell zárni azt a lehetőséget mikor a sor alaphelyzetben van (Utolsó=0) Függvény CiklSorTele(Sor:Sortípus):logikai CiklSorTele:=((Sor.Első=1 és Sor.Utolsó=MaxElem) vagy (Sor.Utolsó>0 és Sor.Utolsó=Sor.Első-1)) vége

20 Új elem elhelyezése a ciklikus sorban A korábbi Sorba eljáráshoz képest annyival bővül, hogy megvizsgáljuk, Utolsó elérte-e az Elem [ ] tömb végét. Ha még nem,akkor egyszerűen továbbléptetjük, ha viszont elérte, akkor a tömb első elemére állítjuk vissza.

21 Függvény CiklSorba(Sor:Adattípus;Adat:Elemtípus):logikai ha nem CiklSorTele(Sor) akkor ha Sor,Utolsó

22 Elem kivétele a ciklikus sorból Ha a sor csak egy elemet tartalmaz (Első=Utolsó), annak kiolvasása után a sort alaphelyzetbe kell állítani. A többi esetben az Első mutatót hasonlóan léptetjük, mint a beírásnál az Utolsót: a tömbön belül a következő elemre, a tömb utolsó eleméről viszont az elsőre.

23 Függvény CiklSorból(Sor:Adattípus;Adat:Elemtípus):logikai ha nem CiklSorÜres(Sor) akkor Adat:=Sor.Elem[Sor.Első] ha Sor.Első:=Sor.Utolsó akkor SorKezd(Sor) különben ha Sor.Elsó


Letölteni ppt "A verem. A verem (stack) homogén adatelemek olyan sorozata, amelyen két művelet értelmezett: –Új elem elhelyezése a verem tetejére (push) –Elem kivétele."

Hasonló előadás


Google Hirdetések