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



Hasonló dokumentumok
Adatszerkezetek 1. Dr. Iványi Péter

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

Verem Verem mutató 01

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Információs Technológia

Assembly Matematika Assembly-ben. Iványi Péter

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

Egyszerű programozási tételek

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Bemutatkozás. Bemutatkozás. Bemutatkozás. Bemutatkozás. 1. előadás. A tárgy címe: A programozás alapjai 1

7. fejezet: Mutatók és tömbök

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++

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

8. gyakorlat Pointerek, dinamikus memóriakezelés

Struktúra nélküli adatszerkezetek

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

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

Adatszerkezetek és algoritmusok

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

Java II. I A Java programozási nyelv alapelemei

Bevezetés a programozásba. 5. Előadás: Tömbök

Programozási nyelvek Java

ADATSZERKEZETEK (VEREM, SOR)

Java II. I A Java programozási nyelv alapelemei

Adatszerkezetek 2. Dr. Iványi Péter

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

Programozas 1. Strukturak, mutatok

A C programozási nyelv III. Pointerek és tömbök.

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

A C programozási nyelv III. Pointerek és tömbök.

Elemi adatszerkezetek

Adatszerkezetek II. 1. előadás

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

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

Számítógép és programozás 2

Érdekes informatika feladatok

Informatika érettségi vizsga

Mutatók és mutató-aritmetika C-ben március 19.

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

Számítógépek felépítése

Alkalmazott modul: Programozás

Adatszerkezetek I. 4. előadás

Rekurzió. Dr. Iványi Péter

Bevezetés az informatikába

Web-programozó Web-programozó

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

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Algoritmizálás és adatmodellezés 2. előadás

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

C++ programozási nyelv

Láncolt Listák. Adat1 Adat2 Adat3 ø. Adat1 Adat2 ø Adat3

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

Architektúra, megszakítási rendszerek

Programozási nyelvek Java

10. gyakorlat Struktúrák, uniók, típusdefiníciók

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

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

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Felvételi tematika INFORMATIKA

Adatszerkezetek Bevezetés Adatszerkezet Adatszerkezet típusok Műveletek Bonyolultság

INFORMATIKA javítókulcs 2016

21. Adatszerkezetek Az adattípus absztrakciós szintjei Absztrakt adattípus (ADT) Absztrakt adatszerkezet (ADS) Egyszerű adattípusok Tömbök

1. Jelölje meg az összes igaz állítást a következők közül!

Adatok ábrázolása, adattípusok

Programozás alapjai 6. előadás. Wagner György Általános Informatikai Tanszék

Adatszerkezetek 1. előadás

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

2018, Diszkrét matematika

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Bevezetés a programozásba. 9. Előadás: Rekordok

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Algoritmizálás és adatmodellezés tanítása 6. előadás

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

Készítette: Nagy Tibor István

Egyirányban láncolt lista

ADATBÁZISKEZELÉS ADATBÁZIS

A programozás alapjai

Kifejezések. Kozsik Tamás. December 11, 2016

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Eljárások és függvények

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

Programozás alapjai. 10. előadás

Apple Swift kurzus 3. gyakorlat

A 32 bites x86-os architektúra regiszterei

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

22. GRÁFOK ÁBRÁZOLÁSA

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

Bevezetés az informatikába

találhatók. A memória-szervezési modell mondja meg azt, hogy miként

Assembly Utasítások, programok. Iványi Péter

Algoritmizálás és adatmodellezés tanítása 1. előadás

Fogalmak: Adatbázis Tábla Adatbázis sorai: Adatbázis oszlopai azonosító mező, egyedi kulcs Lekérdezések Jelentés Adattípusok: Szöveg Feljegyzés Szám

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Adatszerkezetek 2. Dr. Iványi Péter

Pénzügyi algoritmusok

Adatbázis és szoftverfejlesztés elmélet

OOP #14 (referencia-elv)

Átírás:

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

Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2

Adat típusa Az adatot kódoltan tároljuk Az adat típusa számunkra azt jelenti, hogy mi is az amit tárolunk. Ez csak nekünk bír jelentőséggel, a számítógép ezt másképp értelmezi. 3

Adat ábrázolás Ugyanakkor az adat típusa a számítógép számára is hordoz fontos információt A fordító programnak tudnia kell, hogy az adatnak mekkora helyet kell lefoglalni a memóriában és hogyan kell kódolni. Ez az adat belső ábrázolása. 4

Adat ábrázolás Az emberek számára a belső ábrázolás érthetetlen A ki-és beviteli utasítások számára más ábrázolásra van szükséges, amely az ember számára is olvasható és írható Ez az adat külső ábrázolása. 5

Adat A típus azt is meghatározza a fordító számára hogy milyen műveleteket lehet végezni az adatokon. A fordító program nem dönthet a típusról ezért a programban deklarálnunk kell az adatok típusát. 6

Adat Deklarálnunk kell a programban használt: Változók Függvények típusát A programba közvetlenül beírt adat (konstans) típusát nem kell deklarálni, mert a fordító program az adat alakjáról felismeri a típusát. 7

Változók még egyszer A változó az adat tárolására alkalmas memória hely, melynek van: Azonosítója, neve Értéke Típusa 8

Számábrázolás Egyszerű adatok 9

Mutatók A memóriában tárolt adatoknak mindig van címük. Azokat a változókat, melyek más adatok címét tartalmazzák mutatónak vagy pointer-nek nevezzük. 0 1 2 n adat1 adat2 adat3 memória címe mutató1 10

Adatszerkezetek Egyszerű adatszerkezetek összeépítésével lehet létrehozni Általában beépített adatszerkezet Tömb Halmaz Rekord Implementált adatszerkezetek Sor (FIFO) Verem Lista Fa Gráf 11

Tömb Azonos típusú adatokat tárolunk egymás után Tömböt alkotó adatok az elemek Az elemekre a tömb indexével hivatkozunk Deklaráció Tömb elemeinek típusa Tömb mérete 12

Tömb Ha a tömbnek egy indexe van, akkor egy dimenziós tömb: vektor Ha a tömbnek két indexe van, akkor két dimenziós tömb: mátrix Index egész számok sorozata nullától vagy egytől Tárolás sorfolytonosan, elemeket egymás után Több dimenziós tömböket leképezzük egy dimenziós tömbre 13

Tömb tárolás a b c A(1,1) A(2,1) A(3,1) A(1,2) A(2,2) A(3,2) A(1,3) A(2,3) A(3,3) a b c 14

Tömbök feldolgozása A tömbök feldolgozása szorosan összefügg a ciklusokkal Tömb minden egyes elemét feldogozzuk Számláló ciklus Tömb elemein valamilyen tulajdonság meglétét vizsgáljuk Elől-vagy hátultesztelő ciklus 15

Halmaz Halmaz elemei ugyanolyan típusúak Egy elem csak egyszer fordulhat elő Nem minden programozási nyelvben van ilyen típus 16

Rekord Elemei különböző típusúak Egy rekord komponenseit mezőnek nevezzük Lehet fix és változó méretű Változó méret esetén Egy mező értékétől függően a többi mező típusa vagy mérete is változhat Rekordokból is lehet tömböket definiálni 17

Jellemzők Az eddigi adatszerkezetek a programozási nyelvekben általában megtalálhatók. A további adatszerkezeteket a programozónak kell létrehoznia. További adatszerkezetek alapja az egy-dimenziós tömb. 18

Sor Az egymás után beírt adatokat a beírás sorrendjében vehetjük ki. FIFO First In First Out Például: Két nem egyforma sebességgel működő rendszer közötti adatátvitelt akarunk biztosítani, vagy Adatok átadása nem folyamatos, pl. lökésszerű 19

Két alap utasítás van: Sor IN: egy elemet betesz a sorba Ha megtelt a sor hibaüzenetet kell adni OUT: kiveszi a sor következő elemét Ha a sor üres akkor is hibaüzenet, vagy Olyan adatot adunk vissza ami nem fordulhat elő egyébként 20

Megvalósítás 1. Egy dimenziós tömb: tomb Egy mutató, mely megmutatja, hogy hol van a következő üres elem a tömbben: mutato A mutató 0-től indul n-1 ig (mint a C nyelvben) 21

Megvalósítás, IN függvény in be: adat ha mutato = n akkor ki: sor megtelt különben tomb[mutato] = adat mutato = mutato + 1 ki: érvényes elágazás vége függvény vége O(1) 22

Megvalósítás, OUT függvény out O(n) ha mutató = 0 akkor ki: üres sor különben ki: tomb[0] /* első elem kivétele */ ciklus i = 2 mutato tomb[i-1] = tomb[i] ciklus vége mutato = mutato - 1 elágazás vége függvény vége A ciklus lassítja a kivételt, a megvalósítás hátránya!!! 23

Működési példa 1. mutato 0 1 2 Inicializálás mutato 0 1 2 5 IN(5) 24

Működési példa 2. mutato 0 1 2 56 IN(6) mutato 0 1 2 6 OUT 5 25

Megvalósítás 2. Egy dimenziós tömb: tomb Két mutató A mutató 0-tól indul n-1 ig (mint a C nyelvben) psorba: ahova a következő elemet be kell tenni psorbol: ahonnan a következő elemet ki kell venni Ha bármelyik mutató túlmutat a tömb utolsó elemén akkor a mutatót a tömb első elemére irányítjuk. 26

Megvalósítás 2. Normális esetben a két mutató nem mutathat ugyanoda Mikor üres a sor? Ha a psorba egyenlő a psorbol mutatóval. Mikor van tele egy sor? Ha a a psorba utoléri a psorbol mutatót. Ugyanaz nem jelentheti mindkét eseményt!!! 27

Megvalósítás 2. Tele sor jele ha: psorbol = psorba+1 Beírás utoléri a kivételt psorba... Üres sor jele ha: psorba = psorbol+1 Kivétel utoléri a beírást psorbol psorbol... psorba 28

Megvalósítás, IN psorba = 1 psorbol = 0 O(1) függvény in be: adat ha (psorba+1) = psorbol akkor ki: tele van a sor, érvénytelen különben tomb[psorba] = adat psorba = psorba + 1 psorba ki: érvényes elágazás vége függvény vége psorbol... 29

Megvalósítás, OUT függvény out ha (psorbol+1) = psorba akkor ki: üres sor különben psorbol = psorbol + 1 ki: tomb[psorbol] elágazás vége függvény vége O(1) psorba 1 psorbol... 30

Végtelenítjük a sort Megvalósítás 2. Ha bármelyik mutató túlmutat a tömb utolsó elemén akkor a mutatót a tömb első elemére irányítjuk. Maradék osztást használunk index 0 1 2 3 4 5 index mod 4 0 1 2 3 0 1 31

Megvalósítás, IN psorba = 1 psorbol = 0 függvény in be: adat ha ((psorba+1) mod n) = psorbol akkor ki: tele van a sor, érvénytelen különben tomb[psorba] = adat psorba = (psorba + 1) mod n ki: érvényes elágazás vége függvény vége 32

Megvalósítás, OUT függvény out ha ((psorbol+1) mod n) = psorba akkor ki: üres sor különben psorbol = (psorbol + 1) mod n ki: tomb[psorbol] elágazás vége függvény vége 33

Működési példa 1. psorba Inicializálás psorbol psorbol psorba 1 IN(1) 34

Működési példa 2. psorba 1 OUT 1 psorbol psorba 1 OUT üres sor psorbol 35

Működési példa 3. 0 1 2 3 psorba 1 4 IN(4) psorbol psorba 0 1 2 3 1 4 OUT 4 psorbol 36

Működési példa 4. psorba 0 1 2 3 1 4 3 IN(3) psorba= 3 + 1 mod 4 = 4 mod 4 = 0 psorbol psorba 0 1 2 3 5 1 4 3 IN(5) psorbol 37

Működési példa 5. psorba 0 1 2 3 5 1 4 3 IN(6) a sor tele psorbol 38

Verem Az utoljára bevitt adatot lehet először kivenni LIFO Last In First Out Stack nek is szokták nevezni Sok helyen használják Operációs rendszerek Függvények hívása Verem (véges) és verem mutató (stack pointer) 39

PUSH Elem betétele Ha tele a verem, hiba POP Elem kivétele Ha üres a verem, hiba Verem műveletek 40

Megvalósítás, PUSH függvény PUSH be:adat ha verem_mutato = n akkor ki: tele van a verem különben verem[verem_mutato] = adat verem_mutato = verem_mutato + 1 elágazás vége függvény vége 41

Megvalósítás, POP függvény POP ha verem_mutato = 0 akkor ki: üres a verem különben verem_mutato = verem_mutato - 1 ki: verem[verem_mutato] elágazás vége függvény vége 42

Működési példa 1. 3 2 1 0 n = 4 verem_mutato = 0 Inicializálás 3 PUSH(112) 2 1 0 112 verem_mutato = 1 43

Működési példa 2. 3 PUSH(33) 2 1 0 33 112 verem_mutato = 2 3 POP 2 1 0 33 112 verem_mutato = 1 33 44

Működési példa 3. 3 POP 2 1 0 33 112 verem_mutato = 0 112 3 POP 2 1 0 33 112 verem_mutato = 0 hiba 45

Postscript Programozási nyelv, Adobe Systems Inc. PDF elődje Stack alapú Szótárakat (dictionary) használ Interpreter alapú Postscript interpreter értelmezi a programot 46

Post-fix jelölés Postscript műveletek Matematikai jelöles 6 33 add 6+33 Az operandus PUSH-t jelent A művelet kiveszi a stack-ből az értékeket, majd az eredményt visszateszi a stack-re 6 33 add 6 33 6 39 47

6+ 3 / 8 Post-fix jelöléssel: 3 8 div 6 add 3 8 div 6 add 3 8 3 0.375 6 0.375 6.375 48

6+ 3 / 8 Post-fix jelöléssel: 6 3 8 div add 6 3 8 div add 6 3 6 8 3 6 0.375 6 6.375 49

8 7 * 3 Két módszerrel: 8 7 3 mul sub 7 3 mul 8 exch sub 7 3 mul 8 exch sub 21 8 21 21 8-13 50

Példa program %!PS-Adobe-2.0 /inch {72 mul} def /wedge { newpath 0 0 moveto 1 0 translate 15 rotate 0 15 sin translate 0 0 15 sin -90 90 arc closepath } def gsave 4.25 inch 4.25 inch translate 1.75 inch 1.75 inch scale 0.02 setlinewidth 1 1 12 { 12 div setgray gsave wedge gsave fill grestore 0 setgray stroke grestore 30 rotate } for grestore showpage 51

Példa program eredménye 52