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



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

Országzászlók (2015. május 27., Sz14)

INFORMATIKA tétel 2019

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

117. AA Megoldó Alfréd AA 117.

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

Rekurzió. Horváth Gyula.

Információs Technológia

Géptermi zh-írás forgatókönyve

Bevezetés a C++ programozási nyelvbe

Programozás I gyakorlat. 5. Struktúrák

Adatszerkezetek 7a. Dr. IványiPéter

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

1. Alapok. Programozás II

Programozás C nyelven (13. ELŐADÁS) Sapientia EMTE

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

Bevezetés a C++ programozásba

Információs Technológia

Elemi adatszerkezetek

Bevezetés a programozásba 2

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

128. AA Megoldó Alfréd AA 128.

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

500. CC Megoldó Alfréd CC 500.

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

Maximum kiválasztás tömbben

Bevezetés a programozásba I.

Programozás C++ -ban 2007/4

Információs Technológia

A programozás alapjai 1 Rekurzió

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

Feladat. Ternáris fa. Típusspecikáció. Reprezentáció. Absztrakt implementáció. Érdi Gerg EAF II. 4/3.

Rekurzió. 1. Feladat: Sorbaállítások száma. 2. Feladat: Zsebpénz. Horváth Gyula Megoldás. Megoldás

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása

Információs Technológia

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

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

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

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia


Programozás C nyelven (10a. ELŐADÁS) Sapientia EMTE

INFORMATIKAI ALAPISMERETEK

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

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

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

C# feladatgyűjtemény Kovács Emőd, Radványi Tibor, Király Roland, Hernyák Zoltán

Fejlett programozási nyelvek C++ Iterátorok

INFORMATIKA tétel 2018

A C++ Standard Template Library rövid összefoglalás

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

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

Programozás I gyakorlat

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

500. AA Megoldó Alfréd AA 500.

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

.AA Megoldó Alfréd AA.

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

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

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

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

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

Gyakorló feladatok ZH-ra

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

Osztály és objektum fogalma

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

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa

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

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

Programozás alapjai 1. (BMEVIEEA100)

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

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ás C++ -ban

5. Gyakorlat. struct diak {

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

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

XML adatkezelés. 11. témakör. Az XQuery nyelv alapjai. XQuery. XQuery célja egy imperatív lekérdező nyelv biztosítása. XQuery.

Egyszerű programok kezdőknek

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

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

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

Bánsághi Anna

INFORMATIKAI ALAPISMERETEK

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

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)

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

Informatika terméktervezőknek

Elemi alkalmazások fejlesztése I. Olvassunk be egy fájlból egész számokat egy tömbbe. Keressük meg a tömb valamely

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Objektumorientált programozás C# nyelven

Egyszerű programozási tételek

Bevezetés a programozásba. 11. Előadás: Esettanulmány

Programozás II. Fájlkezelés

3. Gyakorlat Ismerkedés a Java nyelvvel

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

3. Hőmérők elkészítése

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.

S z á m í t ó g é p e s a l a p i s m e r e t e k

Átírás:

Körkörös listák fej utolsó fej utolsó Példa. Kiszámolós játék. Körben áll n gyermek. k-asával kiszámoljuk őket. Minden k-adik kilép a körből. Az nyer, aki utolsónak marad. #include <iostream> using namespace std; typedef struct lista{ char nev[20]; lista *kov; LISTA; int k,i,n; LISTA *p,*q, *fej, *utolso; 1

void init(){ fej= new LISTA; fej->kov=null; utolso=fej; void olvas(){ FILE *f=fopen("jatek.txt","r"); fscanf(f,"%d", &n); // n: nevek száma for (i=1; i<=n; i++){ p=new LISTA; fscanf(f, "%s", &p->nev); // egy nevet olvasunk p->kov=null; utolso->kov=p; utolso=p; ; fclose(f); printf("k="); scanf("%d", &k); 2

void kiszamol(){ for (i=1;i<=k-1;i++) p=p->kov; printf("%s kilep a korbol\n", p->nev); q=p->kov; *p=*q; delete q; void main(){ init(); olvas(); utolso->kov=fej->kov; p=fej->kov; while (p!=p->kov) kiszamol(); printf("a gyoztes: %s", p->nev); 3

Állományból olvasva az állomány végéig: void olvas(){ FILE *f=fopen("jatek2.txt","r"); while (!feof(f)){ // állomány vége? p=new LISTA; fscanf(f, "%s", &p->nev); p->kov=null; utolso->kov=p; utolso=p; ; fclose(f); printf("k="); scanf("%d", &k); 4

Más változat: void olvas(){ FILE *f=fopen("jatek.txt","r"); p=new LISTA; while (fscanf(f, "%s", &p->nev)>0){ if (fej==fej->kov){ p->kov=p; fej->kov=p; else{ p->kov=fej->kov->kov; fej->kov->kov=p; p=new LISTA; ; delete(p); fclose(f); printf("k="); scanf("%d", &k); 5

Ritka mátrixok láncolt ábrázolása 50 0 0 0 10 0 20 0 0 0 0 0 30 0 60 5 6

Fák Bináris fák Bináris fák ábrázolásai 1) tömbökkel d b a e i c g h f index info bal jobb utód utód 1 a 2 3 2 b 4 0 3 c 5 6 4 d 0 0 5 e 0 7 6 f 8 0 7 g 9 0 8 h 0 0 9 i 0 0 7

2) bináris füzérrel index info bal jobb utód utód 1 A 2 3 2 B 4 0 3 C 5 6 4 D 0 0 5 E 0 7 6 F 8 0 7 G 9 0 8 H 0 0 9 I 0 0 kódolás Dyck-szóval: 00 01 11 00 10 01 11 01 ábrázolás A 00 B 01 D 11 C 00 E 10 G 01 I 11 F 01 H vagy 00 01 11 00 10 01 11 01 A B D C E G I F H 8

A 00 B 01 D 11 C 00 E 10 G 01 I 11 F 01 H 10 X eredmény: A 00 B 01 D 10 X 11 C 00 E 10 G 01 I 11 F 01 H 9

A 00 B 01 D 11 C 00 E 10 G 01 I 11 F 01 H 00 Y 11 eredmény: A 00 B 01 D 11 C 00 E 00 Y 11 G 01 I 11 F 01 H helyfoglalás szempontjából: eredeti: 3n javasolt: n+ n 8 10

3) dinamikusan typedef struct fa{ típus info; fa *bal, *jobb; FA; info info info Tetszőleges fák ábrázolásai 1) Lefele mutató kapcsolattartás info n c 1 c n 11

2) Bináris fákkal való ábrázolás bal utód: legbalodalibb utód jobb utód: jobb szomszéd A A B C D B E F G H I J K L E C F D infó bal utód jobb testvér G H K I L J 3) Felfele mutató kapcsolattartás infó szülő 12

Kimeneti ábrázolásmódok behúzással (indentálással) A B C D E F G H I J K L A B C D E F G H I J K L zárójeles kifejezéssel A (B ( E,F ),C,D ( G,H(K),I(L),J )) 13

halmazokkal A B C D E F G H I J K L A B C D E F G H I J K L Bemeneti ábrázolásmódok bináris fánál: pl. preorder bejárás szerint, jelezve a hiányzó utódokat tetszőleges fánál: mindig jelezni kell az utódok számát 14

Bináris fa bejárásai preorder gyökérkezdő (gyökér, bal részfa, jobb részfa) inorder gyökérközepű (bal részfa, gyökér, jobb részfa) postorder gyökérvégző (bal részfa, jobb részfa, gyökér) B A D C preorder: A,B,C,D,F,H,E,G E inorder: B,A,D,H,F,C,G,E F G postorder: B,H,F,D,G,E,C,A H #include <iostream> using namespace std; struct Csucs{ char info; Csucs *bal, *jobb; ; Csucs *binfa, *x; 15

void Preorder(Csucs* AktualisCsucs){ if (AktualisCsucs){ printf("%c ", AktualisCsucs->info); Preorder(AktualisCsucs->bal); Preorder(AktualisCsucs->jobb); ; void Postorder(Csucs* AktualisCsucs){ if (AktualisCsucs){ Postorder(AktualisCsucs->bal); Postorder(AktualisCsucs->jobb); printf("%c ", AktualisCsucs->info); ; void Inorder(Csucs* AktualisCsucs){ if (AktualisCsucs){ Inorder(AktualisCsucs->bal); printf("%c ", AktualisCsucs->info); Inorder(AktualisCsucs->jobb); ; 16

Csucs* Keres(Csucs* AktualisCsucs, char c){ if (AktualisCsucs){ if (AktualisCsucs->info==c) return AktualisCsucs; else {x=keres(aktualiscsucs->bal,c); if (x) return x; x=keres(aktualiscsucs->jobb,c); if (x) return x; ; ; return NULL; void Letrehoz(){ char a,b,c; Csucs *p,*q; FILE *f=fopen("binfa.txt","r"); fscanf(f, "%c%c%c%c", &a,&b,&c);// gyökér olvasása binfa=new Csucs; // gyökér létrehozása binfa->info=a; if (b!= ){p=new Csucs; p->info=b; binfa->bal=p; p->bal=p->jobb=null; ; if (c!= ){p=new Csucs; p->info=c; binfa->jobb=p; p->bal=p->jobb=null; ; 17

while (!feof(f)){ // következő csúcs olvasása fscanf(f, "%c%c%c%c", &a,&b,&c); q=keres(binfa,a); if (q) { if (b!= ){p=new Csucs; p->info=b; q->bal=p; p->bal=p->jobb=null; ; if (c!= ){p=new Csucs; p->info=c; q->jobb=p; p->bal=p->jobb=null; ; ; ; fclose(f); ; void main(){ Letrehoz(); printf("\n Preorder: "); Preorder(binfa); printf("\n Inorder: "); Inorder(binfa); printf("\n Postorder: "); Postorder(binfa); 18

Példa. A "binfa.txt" állomány tartalma: ABC CDE EF FGH A fa: A B C D E F G H Bejárások: pre: ABCDEFGH in: BADCGFHE post: BDGHFECA 19