Stack és sor
A verem egy olyan adat tárolási módja, amelyben az adatboltban írt tétel mindig az utolsó, amelyet először kell lekérni (a LIFO fegyelem "utolsó - első ki"). Amikor eltávolít egy elemet, eltávolítja a kötegből.
Tekintsük a köteg használatának legegyszerűbb példáját. Tegyük fel, hogy van egy húr, amely csak nyitó és záró zárójeleket tartalmaz. Meg kell határoznunk, hogy érvényes zárójel kifejezés (vagyis minden nyitó zárójelnél záró kifejezésnek kell lennie). Zavedom tömb és egy változó tárolja a számot az utolsó jelentős elem a tömbben (azaz a verem tetején), amely fel minden nyitó zárójelek (a növekedés a felső 1-es szám), amikor elhaladnak a sorban, és egy találkozó a bezárási el fogja távolítani a megfelelő nyílás (csak csökkentse a köteg tetejének számát). Ha kiderül, hogy „jött” záró zárójel, és a verem üres (azaz a felső szám 0), a kifejezés rossz. Ugyanez mondható el abban az esetben, amikor a vonal vége és a köteg nincs üresen.
Nyilvánvaló, hogy egy ilyen verem megvalósítására nincs szükség a tömb használatára, elég csak egy változóban tárolni a nyitó zárójelek számát. Amikor egy záró zárójelet kapunk a változótól, 1 kivonjuk a hibát, ha a változó értéke negatívvá válik, vagy amikor a vonal végére ér, akkor nem nulla.
Egy összetettebb adat esetében a verem egyirányú, nem körlevéles listával rendezhető. Ha egy elemet fel szeretne tenni a veremre, fel kell venni azt a lista tetejére, hogy kibontsa a veremről - szerezze be az első elem adatait, majd távolítsa el a listáról.
Bármely verem megvalósításának a következő eljárásokat és funkciókat kell tartalmaznia:
eljárás InitStack - inicializálja a köteget;
eljárás Nyomja meg (d: tData) - helyezze az elemet a veremre;
eljárás Pop (var d: tData) - kivonja az elemet a verem tetejétől;
function NotEmpty: logikai - ellenőrizze az ürességet.
A sor különbözik a stack-ből, mivel az utolsóként eljuttatott elem utolsó lesz, és az első - az első ("FIFO"). A listák segítségével a következőképpen lehet megszervezni: nem csak a mutatót tároljuk a lista "fejjel", hanem a "farok" -ot is; mi hozzá a "farok", és kivonat - a "fej".
A várólista végrehajtása (nem feltétlenül a listák használata) "képesnek" kell lennie az ilyen műveletek végrehajtására:
initQueue eljárás - a várólista inicializálása;
AddQueue eljárás (d: tData) - tegye az elemet a sorba;
eljárás SubQueue (var d: tData) - kivonja az elemet a sorból;
function NotEmpty: logikai - ellenőrizze az üresség sorát;