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



Hasonló dokumentumok
Körkörös listák. fej. utolsó. utolsó. fej

Elemi adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

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

Információs Technológia

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

Maximum kiválasztás tömbben

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

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

Adatszerkezetek és algoritmusok

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

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

Algoritmusok és adatszerkezetek gyakorlat 07

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

III. Adatszerkezetek és algoritmusok

Táblázatok fontosabb műveletei 1

Példa 30 14, 22 55,

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

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

Bevezetés a programozásba 2

1. Alapok. Programozás II

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Rendezettminta-fa [2] [2]

Algoritmizálás + kódolás C++ nyelven és Pascalban

Programozás C++ -ban 2007/4

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

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

Adatszerkezetek 7a. Dr. IványiPéter

Programozás II gyakorlat. 4. Öröklődés

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália

Programozás II. 2. Dr. Iványi Péter

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

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

117. AA Megoldó Alfréd AA 117.

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

Osztály és objektum fogalma

Adatszerkezetek és algoritmusok

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

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

Módosítható Prioritási sor Binomiális kupaccal. Wednesday, March 21, 12

Hierarchikus adatszerkezetek

Bevezetés a C++ programozási nyelvbe

Bevezetés a programozásba I.

Verem Verem mutató 01

Programozás II gyakorlat. 8. Operátor túlterhelés

500. CC Megoldó Alfréd CC 500.

Adatszerkezet - műveletek

Információs Technológia

Programozás C++ -ban

Programozás 5. Dr. Iványi Péter

Programozás alapjai C nyelv 9. gyakorlat. Rekurzió. Rekurzív algoritmus

Programozás II. 4. Dr. Iványi Péter

malloc free malloc free int sum(int a[4]) { return a[0] + a[1] + a[2] + a[3]; }

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:

7 7, ,22 13,22 13, ,28

10. gyakorlat Tömb, mint függvény argumentum

Algoritmusok és adatszerkezetek II.

INFORMATIKA tétel 2019

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

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Például számokból álló, egyszeresen láncolt lista felépítéséhez az alábbi struktúra definíciót használhatjuk:

500. AA Megoldó Alfréd AA 500.

Alkalmazott modul: Programozás

Rekurzió. Programozás alapjai C nyelv 9. gyakorlat. Rekurzív algoritmus. Rekurzív algoritmus fajtái. Példa: n! (2) Példa: n!

Generikus Típusok, Kollekciók

Bevezetés a C++ programozásba

Programozás I gyakorlat

Objektum elvű alkalmazások fejlesztése. Verem típus osztály-sablonja

INFORMATIKA tétel 2018

INFORMATIKAI ALAPISMERETEK

Programozás II. ATM példa Dr. Iványi Péter

10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 28.

Önszervező bináris keresőfák

Adatszerkezetek és algoritmusok

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.

Programozás I gyakorlat. 10. Stringek, mutatók

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

Algoritmusok vektorokkal keresések 1

Kupac adatszerkezet. 1. ábra.

Buborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal:

Algoritmusok és adatszerkezetek II.

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Fejlett programozási nyelvek C++ Iterátorok

file:///d:/okt/ad/jegyzet/ad1/b+fa.html

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

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

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

Programozási technológia

Programozás alapjai 9.Gy: Struktúra 2.

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Láncolt lista Bináris keresőfa Gráf Hasító táblázat. Programozás II. labor 2. rész (Adatszerkezetek)

GenerikusOsztály<objektumtípus> objektum = new GenerikusOsztály<objektumtípus>();

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Információs Technológia

Átírás:

Listák félstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat A verem LIFO lista (Last In First Out) angolul stack, románul stivă bevitel a verembe kivitel a veremből verem statikus megoldás V verem (egydimenziós tömb) t a verem teteje (csúcsa) Üres verem létrehozása: t := 0. 1

IsEmpty(V ) 1. if t=0 2. then return igaz 3. else return hamis IsFull(V ) 1. if t = MaxElem 2. then return igaz 3. else return hamis Push(V, a) 1. t := t + 1 2. V t := a Pop(V ) 1. a := V t 2. t := t 1 3. return a Top(V ) 1. a := V t 2. return a 2

dinamikus megoldás nagyon egyszerűsített! typedef int ItemType; struct NodeType{ ItemType info; NodeType* next; NodeType* topptr; bool IsEmpty(){ return (topptr==null); void Push(ItemType newitem){ ItemType Pop(){ NodeType* location; ItemType a; location= new NodeType; a= topptr->info; location->info = newitem; NodeType* tempptr; location->next = topptr; tempptr=topptr; topptr=location; topptr=topptr->next; delete tempptr; return a; ItemType Top(){ return topptr->info; 3

A főprogramban: topptr=null; Alkalmazás Bináris fák kódolása A gyökérből kiindulva, előbb a bal, majd a jobb oldali részfát kódoljuk. Ha egy csúcsból kiindulva mindkét leszármazott létezik, akkor a bal oldali él kódja 00, a jobb élé pedig 11; egy bal oldali él kódja 01, és egy jobb oldali él kódja 10, amennyiben hiányzik az él párja. Az alábbi 3-csúcsú bináris fa kódja: 01 01 01 10 10 01 10 10 00 11 Egy bonyolultabb példa: 00 01 11 00 10 11 4

Bináris fa kódolási algoritmusa Bináris-Fa-Kódolás(B) 1. Legyen B-ben B L a bal, B R pedig a jobb oldali részfa 2. if B L és B R = 3. then kiír 01 4. Bináris-Fa-Kódolás(B L ) 5. if B L = és B R 6. then kiír 10 7. Bináris-Fa-Kódolás(B R ) 8. if B L és B R 9. then kiír 00 10. Bináris-Fa-Kódolás(B L ) 11. kiír 11 12. Bináris-Fa-Kódolás(B R ) Az eljárás hívása Bináris-Fa-Kódolás(B) 5

Visszakódolás Ha egy aktuális csúcsból élt húzunk egy másik csúcsba, akkor ez utóbbi aktuális csúccsá válik. Visszakódolás-Bináris-Fává(c) 1. if c nem üres 2. then olvasd ab 3. töröld ab-t c-ből 4. if ab = 01 5. then rajzolj egy bal élt az aktuális csúcsból 6. Visszakódolás-Bináris-Fává(c) 7. if ab = 10 8. then rajzolj egy jobb élt az aktuális csúcsból 9. Visszakódolás-Bináris-Fává(c) 10. if ab = 00 12. then írd be a verembe az aktuális csúcs helyét 13. rajzolj egy bal élt az aktuális csúcsból 14. Visszakódolás-Bináris-Fává(c) 15. if ab = 11 16. then olvasd ki a verem tetejét, ez lesz az aktuális csúcs 17. rajzolj egy jobb élt az aktuális csúcsból 18. Visszakódolás-Bináris-Fává(c) Az eljárás hívása: Visszakódolás-Bináris-Fává(c) 6

Várakozási sor FIFO (First In First Out) angolul queue, románul şir de aşteptare be h e ki egyik végén hozzáadunk egy elemet, a másikon olvassuk és töröljük Várakozási sor AAT, műveletek: üres, televan, beszúr, olvas és töröl N N=NULL hatso elso void Bevisz (ItemType newitem){ NodeType* newnode newnode = new NodeType; newnode->info = newitem; newnode->next = NULL; if (hatso==null) elso = newnode; else hatso->next=newnode; hatso=newnode; 7

void Kivesz (ItemType& Item){ NodeType* tempptr; tempptr=elso; Item = elso->info; elso = elso->next; if (elso == NULL) hatso = NULL; delete tempptr; Priorítási sor valamilyen kulcs szerint rendezett egyik végén veszünk ki, a kulcs szerinti helyre szúrunk be 8

Tetszőleges lista p info kov beszúrás p után s1 (2) (1) p s2 q (1) q->kov = p->kov (2) p->kov = q törlés p utáni törlése s1 p s2 s1 p q s2 q = p->kov p->kov = q->kov delete q p törlése q = p->kov *p = *q delete q 9

Két irányban láncolt lista #include <iostream> using namespace std; struct elem{ char szo[10]; elem *elore, *hatra; class DLista{ elem *str1, *str2; public: DLista(); ~DLista(){MindentTorol(); void MindentTorol(); void BeszurEle(elem* p, char ujszo[10]); void BeszurUtana(elem* p, char ujszo[10]); void BeszurListaElejere(char ujszo[10]); void BeszurListaVegere(char ujszo[10]); void TorlesElotte(elem* p); void TorlesUtana(elem* p); void Torles(elem* p); void BejarElejerol(); void BejarVegerol(); 10

DLista::DLista(){ str1 = new elem; str2 = new elem; str1->hatra = NULL; str1->elore = str2; str2->hatra = str1; str2->elore = NULL; void DLista::BeszurEle(elem *p, char ujszo[10]){ elem *q = new elem; strcpy(q->szo, ujszo); p->hatra->elore = q; q->hatra = p->hatra; q->elore = p; p->hatra = q; void DLista::BeszurUtana(elem *p, char ujszo[10]){ elem *q = new elem; strcpy(q->szo, ujszo); q->elore = p->elore; q->hatra = p; p->elore->hatra = q; 11

p->elore = q; void DLista::BeszurListaElejere(char ujszo[10]){ BeszurUtana(str1,ujszo); void DLista::BeszurListaVegere(char ujszo[10]){ BeszurEle(str2,ujszo); void DLista::TorlesElotte(elem* p){ elem *r = p->hatra; p->hatra->hatra->elore = p; p->hatra = p->hatra->hatra; delete r; void DLista::TorlesUtana(elem* p){ elem *r = p->hatra; p->elore = p->elore->elore; p->elore->hatra = p; delete r; 12

void DLista::Torles(elem* p){ elem *r = p; p->hatra->elore = p->elore; p->elore->hatra = p->hatra; delete r; void DLista::BejarElejerol(){ elem *p = str1->elore; while (p!=str2){ printf("%s ", p->szo); p = p->elore; printf("\n"); void DLista::BejarVegerol(){ elem *p = str2->hatra; while (p!=str1){ printf("%s ", p->szo); p = p->hatra; printf("\n"); 13

void DLista::MindentTorol(){ elem* tempptr; while (str1!=null){ tempptr = str1; str1 = str1->elore; delete tempptr; void main(){ DLista dlista; char uj[10]; printf("a szo: "); scanf("%s", &uj); while (strcmp(uj,"*")!=0){ dlista.beszurlistavegere(uj); printf("a szo: "); scanf("%s", &uj); dlista.bejarelejerol(); printf("\n"); dlista.bejarvegerol(); 14