Verem Verem mutató 01

Hasonló dokumentumok
Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Aritmetikai kifejezések lengyelformára hozása

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Adatszerkezetek 1. Dr. Iványi Péter

Adatszerkezetek és algoritmusok

ADATSZERKEZETEK (VEREM, SOR)

Alkalmazott modul: Programozás

Rekurzió. Működése, programtranszformációk. Programozás II. előadás. Szénási Sándor.

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Programozás alapjai II. (7. ea) C++

.Net adatstruktúrák. Készítette: Major Péter

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

Absztrakt adatstruktúrák A bináris fák

Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

4. VEREM. Üres: V Verembe: V E V Veremből: V V E Felső: V E

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Információs Technológia

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

Algoritmusok és adatszerkezetek I. 2. előadás

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

félstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat

Web-programozó Web-programozó

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

2. Ítéletkalkulus szintaxisa

Rekurzió. Dr. Iványi Péter

Gyakorló feladatok. /2 Maradék /16 Maradék /8 Maradék

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Nyugat-magyarországi Egyetem Geoinformatikai Kara. Prof. Dr. Závoti József. Matematika III. 2. MA3-2 modul. Eseményalgebra

Készítette: Nagy Tibor István

Mikroprocesszor CPU. C Central Központi. P Processing Számító. U Unit Egység

Szoftvertervezés és -fejlesztés I.

BASH script programozás II. Vezérlési szerkezetek

7. Strukturált típusok

Bevezetés a programozásba I.

Paraméter átadás regisztereken keresztül

HÁZI FELADAT PROGRAMOZÁS I. évf. Fizikus BSc. 2009/2010. I. félév

Programozási nyelvek Java

BASH SCRIPT SHELL JEGYZETEK

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Programozás C++ -ban

DSP architektúrák dspic30f család

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

az Excel for Windows programban


Egész számok. pozitív egész számok: 1; 2; 3; 4;... negatív egész számok: 1; 2; 3; 4;...

Amortizációs költségelemzés

2018, Funkcionális programozás

BME MOGI Gépészeti informatika 5.

Gyakorló feladatok az 1. nagy zárthelyire

Digitális rendszerek. Utasításarchitektúra szintje

1. Az utasítás beolvasása a processzorba

Bevezetés a C++ programozásba

A számok kiírása is alapvetően karakterek kiírásán alapul, azonban figyelembe kell venni, hogy a számjegyeket, mint karaktereket kell kiírni.

Ítéletkalkulus. 1. Bevezet. 2. Ítéletkalkulus

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Adatszerkezetek I. 4. előadás

Bevezetés a programozásba I.

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Felvételi tematika INFORMATIKA

7/8. gyakorlat Karaktertömbök és sztringkezelés

Algoritmusok és adatszerkezetek I. 2. előadás

Smalltalk 2. Készítette: Szabó Éva

Mi az assembly? Gyakorlatias assembly bevezető. Sokféle assembly van... Mit fogunk mi használni? A NASM fordítóprogramja. Assembly programok fordítása

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Generikus osztályok, gyűjtemények és algoritmusok

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

REKURZIÓ. Rekurzív: önmagát ismétlő valami (tevékenység, adatszerkezet stb.) Rekurzív függvény: függvény, amely meghívja saját magát.

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Bevezetés a programozásba. 8. Előadás: Függvények 2.

1. ábra: Perifériára való írás idődiagramja

Algoritmusok és adatszerkezetek I. 3. előadás

A számítógép alapfelépítése

Hardverközeli programozás 1 1. gyakorlat. Kocsis Gergely

ELEMI PROGRAMOZÁSI TÉTELEK

3/1. tétel: Linearis adatszerkezetek és műveleteik

5. Rekurzió és iteráció (Rekurzív programok átírása nemrekurzívvá)

Negatív alapú számrendszerek

;3 ; 0; 1 7; ;7 5; 3. pozitív: ; pozitív is, negatív is: ;

Adatszerkezetek I. 8. előadás. (Horváth Gyula anyagai felhasználásával)

Programozás I gyakorlat

Gyakorló feladatok. Az alaputasítások olyanok, mint C-ben. (Részleteket ld. segedletek/02.pdf vagy bármelyik Java tutorial.)

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

- Levelek: operandusok - Csomópontok: operátorok. Fenti kifejezés: (x+ (y 10)) * (6 / z) Bináris Keresőfa (BST) Példa bináris keresőfára.

Adatszerkezetek és algoritmusok

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

Programozási technológia I. 1. beadandó feladatsor

SZÁMÍTÁSOK A TÁBLÁZATBAN

Elemi adatszerkezetek

Programozási technológia

Programozási nyelvek Java

RESIDENT EVIL CODENAME: NIK

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

Struktúra nélküli adatszerkezetek

Átírás:

A számítástechnikában a verem (stack) egy speciális adatszerkezet, amiben csak kétféle művelet van. A berak (push) egy elemet a verembe rak, a kivesz (pop) egy elemet elvesz a verem tetejéről. Mindig az utoljára betett elem vehető el, a verem többi része nem elérhető. Ezért is hívják LIFO adatszerkezetnek (Last In First Out). 7 6 5 4 3 2 1 356 0 123 Verem mutató 01 2 A kezeléséhez szükség van egy verem mutatóra. A veremmutató mutatja a veremben az első szabad helyet. Kezdetben 0. Ha egy elem a verembe kerül (push), akkor a verem mutató értéke növekszik. Ha egy elem kijön (pop), a verem mutató értéke csökken.

A megvalósítást szimuláljuk tömb segítségével. Ebben az esetben csak egyforma elemek kerülhetnek a verembe. BERAK(mit) Ha vmut=vmeret akkor nincs hely!!! egyébként verem[vmut]=mit : vmut=vmut+1; feltétel vége KIVESZ(mit) Ha vmut=0 akkor üres a verem egyébként vmut=vmut-1 : mit=verem[vmut] feltétel vége

Készíts Programot, ami beolvas egy c++ programot és ellenőrzi, hogy a zárójelezés rendben van-e Döntsd el egy stringben tárolt számról, hogy palindrom-e. (A feladatot veremmel kell megoldani.) Olvass be egy számot és egy számrendszert, váltsd át a számot az adott számrendszerbe és írd ki az eredményt helyiérték helyesen. (Használj vermet a megoldáshoz!)

Készítsen játékprogramot a veremkezelés szemléltetésére. A játékszabályok: Legyen egy 100 elemet befogadni képes verem. Induláskor töltsünk be 20 elemet. Egy-egy elem egy 1 és 10 közötti véletlen szám és a hozzá tartozó súly, amely szintén egy véletlen szám 1 és 5 között. A játék: tippelni kell a verem tetején lévő számra. Ha eltaláltuk, akkor annyi véletlen számmal tölti tovább a program a vermet, amennyi a kitalált szám és a hozzá tartozó súly szorzata. (A játékos nem ismeri a súlyozó tényezőket, sem a számokat) Ha nem találtuk ki a számot, akkor a verem tetején lévő szám törlődik, s az alatta lévő (következő) számra lehet tippelni. A játékos nyert, ha a verem megtelt. A nyeremény a veremben letárolt véletlen számok súlyokkal szorzott összege. A játékos vesztett, ha a verem kiürült. A verem tárolására egy 100 elemű egydimenziós tömböt fogunk használni. A tömb elemei rekordok.

Lengyel formula A szokásos matematikai formulákat nagyon nehéz kiértékelni. Pl. a*(b+c)/d^(x+y)*e A kifejezés azonban átírható úgy, hogy zárójelre nincs szükség és a kiértékelés is könnyű. A kapott alakot fordított lengyel formulának hívják, vagy röviden lengyel formulának. Nézzünk néhány példát: Szokásos a+b a b + Lengyel alak a+b*c a b c * + a*b^c+d a b c ^ * d + Ha operandust találunk akkor azt másoljuk a kimenetre. Ha műveletet, akkor a verem tetején levőt másoljuk ha nagyobb a prioritása, ha kisebb egyenlő akkor ez is megy a verembe.

Kicsit bonyolultabb a helyzet, ha a zárójelezést is kezelni akarjuk. Ha nyitót találunk, akkor az megy a verembe. Az operandusok és műveletek kezelése nem változik. Ha zárót találunk, akkor a veremből sorban a kimenetre másoljuk a jeleket a nyitó zárójelig. (Ez annak köszönhető, hogy a zárójelen belüli kifejezés egy önálló alak, lehetne rekurzív a megoldás ) Szokásos Lengyel alak a*(b+c) a b c + * (a+b)*c a b + c * a*b^(c+d)*e a b c d + ^ * e * A műveletek prioritása "("=0; + - =1; */ = 2; ^=3. Az üres verem 0;

A műveletek prioritása "("=0; + - =1; */ = 2; ^=3. Az üres verem 0; Szokásos a * b ^ ( c + d * e ) * f Lengyel alak Verem

CIKLUS AMÍG van elem a forrásban Következő elem beolvasása a forrásból X-be HA X egy operandus EREDMENY := EREDMENY + X HA X egy nyitó zárójel VEREMBE ( X ) HA X egy záró zárójel CIKLUS AMÍG a verem teteje nem nyitó zárójel KIVESZ VEREMBŐL Y-ba EREDMENY := EREDMENY + Y CVEGE KIVESZ VEREMBŐL Y-ba (nyitó zárójel) HA X egy műveleti jel CIKLUS AMÍG a verem tetején levő elem prioritása >= X prioritása KIVESZ VEREMBŐL Y-ba EREDMENY := EREDMENY + Y CVÉGE VEREMBE X CVÉGE CIKLUS AMÍG verem nem üres KIVESZ VEREMBŐL Y-ba EREDMENY := EREDMENY + Y CVÉGE

A kiértékelés már sokkal egyszerűbb. CIKLUS AMÍG van elem a forrásban Következő elem beolvasása a forrásból X-be HA X egy operandus verembe(x értéke) HA X egy műveleti jel veremből(e2) : veremből(e1) : verembe (E1 művelet E2) CVÉGE veremből(eredmény)