Adatszerkezetek és adattípusok. Vermek-Sorok (dinamikusan)

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

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

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Elemi adatszerkezetek

Verem Verem mutató 01

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

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

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

Adatszerkezetek 1. Dr. Iványi Péter

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

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

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

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

4. Előfeltételek (ha vannak) 4.1 Tantervi Nincs 4.2 Kompetenciabeli Elemi algoritmusok ismerete

Programozás I gyakorlat

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

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

Adatszerkezetek 7a. Dr. IványiPéter

Adatszerkezetek és algoritmusok

Adatszerkezetek 1. előadás

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]

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

Tuesday, March 6, 12. Hasító táblázatok

Táblázatok fontosabb műveletei 1

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

Komputeralgebra Rendszerek

Járműfedélzeti rendszerek II. 4. előadás Dr. Bécsi Tamás

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

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

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

Önszervező bináris keresőfák

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

Adatszerkezet - műveletek

Algoritmusok és adatszerkezetek gyakorlat 07

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

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

Struktúra nélküli adatszerkezetek

ADATSZERKEZETEK (VEREM, SOR)

A lista adatszerkezet A lista elemek egymásutániságát jelenti. Fajtái: statikus, dinamikus lista.

Alkalmazott modul: Programozás 9. előadás. Strukturált programozás: dinamikus adatszerkezetek

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

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

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

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

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

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Egyirányban láncolt lista

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

Adatszerkezetek és algoritmusok

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

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:

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

Láncolt listák. PPT 2007/2008 tavasz.

Programozás C++ -ban

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)

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

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

1.előadás Tornai Kálmán

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.

Adatszerkezetek és algoritmusok

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

Információs Technológia

Alkalmazott modul: Programozás

Adatszerkezetek 2. Dr. Iványi Péter

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

Programozási nyelvek Java

Érdekes informatika feladatok

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Tartalomjegyzék. Köszönetnyilvánítás. 1. Az alapok 1

van neve lehetnek bemeneti paraméterei (argumentumai) lehet visszatérési értéke a függvényt úgy használjuk, hogy meghívjuk

Adatszerkezetek és algoritmusok

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

Algoritmusok és adatszerkezetek II.

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

Számláló rendezés. Példa

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Adatszerkezetek Hasító táblák. Dr. Iványi Péter

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

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

Fejlett programozási nyelvek C++ Iterátorok

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

III. Adatszerkezetek és algoritmusok

ADATSTRUKTÚRÁK ÉS ALGORITMUSOK

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Algoritmusok és adatszerkezetek II.

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

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

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

Programozási segédlet

Adatszerkezetek 2. Dr. Iványi Péter

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

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

9. előadás. A táblázat. A táblázatról általában, soros, önátrendező, rendezett és kulcstranszformációs táblázat

Bevezetés a programozásba 2

22. GRÁFOK ÁBRÁZOLÁSA

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

Átírás:

6. Adatszerkezetek és adattípusok Vermek-Sorok (dinamikusan)

Fontos tudnivalók Elméleti tesztek: Első projekt témája (tétel, tömb, halmaz) Parciális (7-8-9 hét)

01 02 03 Algoritmusok és adatszerkezetek Algoritmusok elemzése Adatszerkezetek és adattípusok 04 05 06 Statikus adatszerkezetek: Tétel (rekord), tömb Félstatikus adatszerkezetek: Vermek, sorok Dinamikus adatszerkezetek: Listák

07 08 09 Ismétlés, összefoglaló Dinamikus adatszerkezetek: Fák, Bináris keresőfák Hasítótáblák 10 11 12 Rendezési algoritmusok Keresési algoritmusok Adattömörítés

13 14 Félig strukturált adatok Összefoglaló és ismétlés

! Válaszaitok Ha gondot okoz a labor házi megoldása, honnan kérsz segítséget? (egy szó)

? RAJTAD A SOR! Szeretnéd a parciálison használni a jegyzeted?

? RAJTAD A SOR! Add meg a következő kérdésre a helyes választ (mérjed az időt!!!)

https://quizizz.com Ismeretek ellenőrzése - Figyelmesen olvasd el a kérdést - Csak egy helyes válasz van - 10 kérdésre kell válaszolni - A válaszok megadása időhöz kötött - Sor=várakozási sor Jó munkát!

Feladat-Verem Helyes zárójelezés:döntsük el, hogy egy kifejezésben használt zárójelek használata helyes-e: -a nyitó és csukó zárójelek száma megegyezik -a zárójelezés bármely pontjában a nyitó zárójelek száma nagyobb vagy egyenlő, mint a csukó zárójelek száma https://slideplayer.hu/slide/2092032/

Feladat-sor Egy bevásárlóközpont két parkolójának kivezetése ugyanarra az útra nyílik. Mindkét parkoló kijáratát rendőrlámpa szabályozza. A parkolók kivezető szakaszain a lámpa előtt autók állnak sorban. Az egyik lámpa 3 autót enged át egyszerre, a másik csak kettőt. Írj programot, mely meghatározza az elvezető úton lévő autók sorrendjét. Használj sor adatszerkezetet és a hozzá kapcsolódó műveleteket!

Absztrakt adattípusok (AAT) Összetett típusok Statikus adatszerkezetek Tétel (record) Tömb (array) Halmaz (set) Félstatikus adatszerkezetek Verem (stack) Várakozási sor (queue) Hasító tábla (hashing table) Dinamikus adatszerkezetek Lineáris lista (list) Fa (tree) bináris fa

Dinamikus adatszerkezetek a dinamikus adatszerkezetek komponenseinek száma változik a program végrehajtása során (nő vagy csökken)) elkerülhető a statikus tárkezelés hátrányai (a tárhely nem bizonyul elégségesnek vagy túl nagynak bizonyul) elkerülhető a statikus tárkezelés hátrányai ami a törlés és beszúrás időigényességét illeti (tologatás balra, jobbra)

Dinamikus adatszerkezetek dinamikus adatszerekezetek esetén a beszúrás és törlés az adatszerkezet láncolását teszi szükségessé a dinamikus változónak tartalmaznia kell a feldolgozandó információ mellett a láncolásra hivatkozó információt is azok a dinamikus adtaszerkezetek, amelyekben az elemek egyetlen szinten fűződnek (láncolódnak) egymás után a lineáris lista nevet viselik speciális lineáris listák: verem, várakozási sor, egyszeresen-, kétszeresen- és körkörösen láncolt lista

Listák

Lista csomópontok

Lista - osztályozás

A verem (Stack) LIFO = last in first out (dinamikus implementáció) Értelmezés: 1.Statikus Dinamikus megvalósítás esetén a verem elemeit egy tömbben tároljuk nek tárolása egy speciális listát használunk, amelyben minden beszúrási és törlési művelet csak a lista egyik végén történik. 2.A veremben lévő elemek számát, más szóval az utoljára betett elem sorszámát egy ún. veremmutató tartalmazza. A veremben utoljára betett elem címét egy ún. veremmutató pointer tartalmazza. 3. Ha új elemet teszünk a verembe, a veremmutató értéke eggyel nő, ha kiveszünk, akkor eggyel csökken. Üres verem esetén értéke 0, teli verem esetén pedig egyenlő a vektor maximális indexével. A kapcsolattartó mező annak az elemnek a címe, amelyet az előző beszúrás alkalmával helyeztünk a verembe. Ez alól csak egy elem kivétel, az alap, melynek a kapcsolatmezője NULL.

A verem (stack) Értékhalmaz: mystack verem sp a verem teteje (veremmutató) typedef struct { int maxsize; int sp; int *items; } STACK; STACK *mystack; Stack verem typedef struct NodeType{ int info; struct NodeType *next; }NodeType; NodeType *topptr; Érték Saját cím Következő elem címe

A verem (Stack) Műveletek: (O(1)) Üres?: igaz, ha a verem csúcsának mutatója NULL-e IsEmpty (topptr) if topptr=null then return true else return false!!! topptr=null (főprogramban) Inicializálás: egy új csomópont helyfoglalása, a kapcsolattartó mező értéke NULL Create () uj_elem helyfoglálása uj_elem->next=null NULL

A verem (stack) Verembe (push): egy elem bevitele a verembe (a verem tetejére ). létrehozunk egy új csomópontot Push (topptr, a) NodeType newnode newnode=create()!!!! int main() {NodeType *node=null; } NULL newnode 2 topptr 1

A verem (stack) Verembe (push): egy elem bevitele a verembe (a verem tetejére ). létrehozunk egy új csomópontot feltöltjük értékkel az info mezőt Push (topptr, a) NodeType newnode newnode=create() newnode->info=a!!!! int main() {NodeType *node=null; } newnode 3 NULL 2 topptr 1

A verem (stack) Verembe (push): egy elem bevitele a verembe (a verem tetejére ). létrehozunk egy új csomópontot feltöltjük értékkel az info mezőt Push (topptr, a) NodeType newnode newnode=create() newnode->info=a!!!! int main() {NodeType *node=null; } a kapcsolatmezőbe bemásoljuk a legfelső elem címét newnode->next=topptr 3 NULL newnode 2 topptr 1

A verem (stack) Verembe (push): egy elem bevitele a verembe (a verem tetejére ). létrehozunk egy új csomópontot feltöltjük értékkel az info mezőt Push (topptr, a) NodeType newnode newnode=create() newnode->info=a!!!! int main() {NodeType *node=null; } a kapcsolatmezőbe bemásoljuk a legfelső elem címét ez lesz a legfelső elem newnode->next=topptr topptr=newnode 3 NULL topptr=newnode topptr 2 1

A verem (stack) Veremből (pop): a verem tetején található elem kivétele a veremből. Csak akkor tudunk elemet kivenni, ha a verem nem üres Pop (topptr) 3 topptr 2 1

A verem (stack) Veremből (pop): a verem tetején található elem kivétele a veremből. Csak akkor tudunk elemet kivenni, ha a verem nem üres Kimentjük a legfelső elem címét és hasznos információját Pop (topptr) NodType auxnode int auxinfo auxnode=topptr auxinfo=topptr->info auxnode 3 topptr 2 1

A verem (stack) Veremből (pop): a verem tetején található elem kivétele a veremből. Csak akkor tudunk elemet kivenni, ha a verem nem üres Kimentjük a legfelső elem címét és hasznos információját A veremmutató pointer a következő elemre fog mutatni Pop (topptr) NodType auxnode int auxinfo auxnode=topptr auxinfo=topptr->info topptr=topptr->next auxnode 3 2 topptr topptr 1

A verem (stack) Veremből (pop): a verem tetején található elem kivétele a veremből. Csak akkor tudunk elemet kivenni, ha a verem nem üres Kimentjük a legfelső elem címét és hasznos információját A veremmutató pointer a következő elemre fog mutatni Kitöröljük a legfelső elemet (hely felszabadítása) Visszatérítjük a kitörölt elem hasznos információját Pop (topptr) NodType auxnode int auxinfo auxnode=topptr auxinfo=topptr->info topptr=topptr->next free(auxnode) return auxinfo auxnode 3 2 1 topptr topptr

A verem (stack) Verem legfelső eleme (top): a verem tetején található elem visszatérítése. Csak akkor sikeres, ha a verem nem üres Top (topptr) return topptr->info; 3 topptr 2 1

Verem dinamikus implementálása function.h typedef struct NodeType{ int info; struct NodeType *next; }NodeType; NodeType* create(); void push(nodetype** topptr, int data); int top(nodetype*topptr); int pop(nodetype**topptr); int isempty(nodetype *topptr);

Verem dinamikus implementálása function.c NodeType *create() { NodeType *newnode = (NodeType *) malloc(sizeof(struct Node *)); newnode->next = NULL; return newnode; }

Verem dinamikus implementálása void push(nodetype **topptr, int data) { NodeType *newnode = create(); newnode->info = data; newnode->next = *topptr; *topptr=newnode; }

Verem dinamikus implementálása int top(nodetype*topptr) {ha nem üres return topptr->info; } int pop(nodetype**topptr) {ha nem üres {NodeType *aux; int auxinfo; aux = *topptr; *topptr = aux->next; auxinfo = aux->info; free(aux); return auxinfo; }

A várakozási sor (QUEUE) a hozzáférés a sor elemeihez a sor elejétől indulva valósítható meg az elemek az érkezésük sorrendjében tárolódnak és ebben a sorrendben érhetők el létező elemet csak a sor elejéről távolíthatunk el új elemet csak a sor végére szúrhatunk be

A várakozási sor (Queue) Értékhalmaz: (O(1)). Queue a sor typedef struct NodeType {int info; struct NodeType *next; } NodeType; NodeType *front, *last;!!!! int main() {NodeType *first=null; last=null;} Érték Saját cím Következő elem címe

A várakozási sor (QUEUE) Értékhalmaz: Üres?: igaz, ha a sor eleje és a vége is a NULL pointer IsEmpty (first) if first=null then return true else return false first=null last=null (főprogramban) Inicializálás: egy új csomópont helyfoglalása, a kapcsolattartó mező értéke NULL Create () uj_elem helyfoglálása uj_elem->next=null

A várakozási sor (Queue) Új elem bevitele a Sorba (insert): egy elem bevitele a sorba (a sor végére) létrehozunk egy új csomópontot feltöltjük értékkel az info mezőt Insert(first, last, a) NodeType newnode newnode=create() newnode->info=a first last a newnode NULL ha üres a sor, ez lesz az első és az utolsó elem különben: az utolsó elemet összekötjük az új elemmel az utolsó elem címe az új elem címe lesz if (IsEmpty(first)) {first=newnode last=newnode } Else { last->next=newnode; last=newnode; } adr1 1 adr2 first adr2 2 adr3 newnode adr3 3 NULL last adr4 4 NULL last

A várakozási sor (Queue) Elem törlése a Sorból (delete): egy elem törlése a sorból(a sor elejéről, ha nem üres a sor) A sor első elemének a címét egy segédváltozóba másoljuk, az itt levő hasznos információt pedig egy info mezőnek tipusával megegyező változóba Delete(first) NodeType auxnode if (!IsEmpty(first) { auxnode=first; int auxinfo=first.info auxnode adr1 1 adr2 first last newnode a NULL adr2 adr3 2 adr3 3 NULL Az első elem címe az utána következő elem címe lesz first=fistr->next first first last felszabadítjuk a segédváltozó segítségével a régi első elem által elfoglalt tárrészt Free(auxNode) return auxinfo } else return INT_MIN;

Egyszeresen láncolt lista Egyszeresen láncolt lista=várakozási sor + elem törlése elölről +???

Dokumentáció https://ms.sapientia.ro/~kasa/adat.htm https://moodle.ms.sapientia.ro/course/view.php?id=32 Cormen-Lieserson-Rivest-Stein.-.Uj.algoritmusok.pdf http://www.informatom.hu/sze/01/lgb_sz001/ https://www.geeksforgeeks.org/data-structures/linked-list/