Láncolt lista. az itt adott nevet csak a struct deklaráción belül használjuk



Hasonló dokumentumok
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 I gyakorlat

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

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Programozas 1. Strukturak, mutatok

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Programozás II. Fájlkezelés

Nagy HF u tmutato 2011/2012 II. fe le v

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

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

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

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

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

A programozás alapjai 1 Rekurzió

7. gyakorlat Sorozatok, Fájlkezelés

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

NAV nyomtatványok kitöltésének támogatása

Bevezetés a programozásba I.

Programozás C és C++ -ban

Listák, szótárak, fájlok Listák, szótárak, fájlok

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Táblázatok fontosabb műveletei 1

Információs Technológia

C változók. Feladat: Deklaralj egy valos, egy karakter es ket egesz tipusu valtozot! int main() {

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

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

Felhasználó által definiált adattípus

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)

Óbudai Egyetem. C programozási nyelv

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

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

A C programozási nyelv VI. Parancssori argumentumok File kezelés

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

C++ programozási nyelv Konstruktorok-destruktorok

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

Programozás alapjai 3.Gy: C elágazások, ciklusok P R O

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

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

12. gyakorlat Enum; Tárolási osztályok Preprocesszor utasítások; Moduláris programozás

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.

A C# programozási nyelv alapjai

Közoktatási Statisztika Tájékoztató 2012/2013. Használati útmutató

Programozási Nyelvek: C++

C++ programozási nyelv

C programozási nyelv

HP LaserJet M9040/9050 MFP Gyors referencia útmutató

2018, Funkcionális programozás

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

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

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

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

Nagy HF ke szı te si u tmutato

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

HP Color LaserJet CM3530 MFP sorozat Gyors referencia útmutató. Művelet: Másolás. Digitális küldés. Fax. Feladatok tárolása

BarAck.Net. Internetes csomagkezel. Felhasználói kézikönyv V 1.0. (2011. július 20.)

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

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Információs Technológia

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

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

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

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Preprocesszor. Programozás alapjai C nyelv 11. gyakorlat. Makrók (2) Makrók (#define) Makrók (3) #include

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Pénzügyi algoritmusok

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 30.

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

1. Alapok. Programozás II

Tartalomjegyzék. 1. Belépés a vásárolt e-könyvek eléréséhez. 2. A könyvespolc. 3. Az olvasó nézet

Bevezetés a C++ programozási nyelvbe

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:

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

Adatbázisrendszerek I. Fájlszintű adattárolás C-ben

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

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

Bevezetés a programozásba I.

AZ N-WARE KFT. ÁLTAL ELEKTRONIKUSAN ALÁÍRT PDF DOKUMENTUMOK HITELESSÉGÉNEK ELLENŐRZÉSE VERZIÓ SZÁM: 1.3 KELT:

A Web Services protokoll használata hálózati szkennelésre (Windows Vista SP2 vagy újabb verzió, valamint Windows 7 és Windows 8 esetén)

Egyirányban láncolt lista

3. Osztályok II. Programozás II

ALEPH Elektronikus Katalógus rövid útmutató

Bevezetés a C++ programozási nyelvbe

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

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 C nyelven (13. ELŐADÁS) Sapientia EMTE

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

Bluetooth párosítás. Felhasználói útmutató

Adatszerkezetek 1. Dr. Iványi Péter

Szkriptnyelvek. 1. UNIX shell

A C programozási nyelv II. Utasítások. A függvény.

Programozás I gyakorlat

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Mutatók. Dr. Bécsi Tamás 7. Előadás

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

MATLAB. 9. gyakorlat. Cellatömbök, struktúrák, fájlműveletek

Átírás:

Láncolt lista int szam char szoveg[10] következő elemre mutató pointer int szam char szoveg[10] következő elemre mutató pointer elem elem elem int szam char szoveg[10] következő elemre mutató pointer A láncolt lista egymás után egy irányba felfűzött elemek halmaza. Hogy készül a láncolt lista? Veszünk egy struct-ot, ami a lista elemének prototípusa lesz. az itt adott nevet csak a struct deklaráción belül használjuk a következő ugyanilyen típusú struct lista_struct *kovetkezo; listaelemre mutató pointer lista_tipus; ezzel a névvel hivatkozunk majd valójában a típusra Mondjuk van egy adat.txt szöveg fájlunk, ami a következő módon néz ki: 66 elefant 10 nyul 6 pocok Ebből ki akarjuk olvasni az adatokat és bele akarjuk rakni a fenti listába. Hogyan tegyük ezt meg? lista_tipus ; lista_tipus ; A láncolt lista használatához szükséges két mutató: - a lista feje, ez az első elemre mutat. - az aktuális elemre mutató pointer - 1 -

A fájból való olvasáshoz a következő sorokat kell hozzáadnunk a programhoz: f=fopen("adat.txt", "r"); while(fscanf(f,"%d %s",&beolvasott_szam,beolvasott_szoveg)!= EOF) printf("szam: %d, szoveg: %s\n", beolvasott_szam, beolvasott_szoveg); Ez idáig annyit csinál, hogy a végéig olvassa az adat.txt-t. Az adat.txt sorai a beolvasott_szam és beolvasott_szoveg változókba kerülnek. Ezeket kellene betenni a láncolt listába. Új kód: a fej értéke jelzi, hogy még nincs egy eleme sem a láncolt listának az fscanf kiolvas egy sort a fájlból a megadott formátum szerint. Ha elfogyott a fájl, ún. EOF értéket ad vissza. fej=; while(fscanf(f,"%d %s",&beolvasott_szam,beolvasott_szoveg)!= EOF) if(fej==) Ha üres a listánk: 1.) lefoglalunk helyet az első elemnek fej=(lista_tipus*)malloc(sizeof(lista_tipus)); aktualis=fej; 2.) az első elemet tesszük aktuálissá. aktualis->kovetkezo=; 3.) A láncolt lista végére mindig a kerül. else Ha már nem üres a listánk: Mindig az aktuális elem végére fűzzük az újabb elemet. aktualis->kovetkezo=(lista_tipus*)malloc(sizeof(lista_tipus)); aktualis->kovetkezo->kovetkezo=; aktualis=aktualis->kovetkezo; A beolvasott adatok átrakása az aktuális elembe. - 2 -

Nagyszerű! Idáig van egy teljesen kész, működő kódunk, ami egy fájl alapján felépít a memóriában egy láncolt listát. A teljes kód így néz ki: struct lista_struct *kovetkezo; lista_tipus; lista_tipus ; lista_tipus ; f=fopen("adat.txt", "r"); //Fajl megnyitasa olvasasra fej=; while(fscanf(f,"%d %s",&beolvasott_szam,beolvasott_szoveg)!= EOF) if(fej==) //Uj elem hozzaadasa, ha meg ures volt a listank fej=(lista_tipus*)malloc(sizeof(lista_tipus)); //Uj elem aktualis=fej; //A fej legyen az aktualis aktualis->kovetkezo=; //Az uj elem legyen a lista vege else //Uj elem hozzaadasa ha mar volt elem a listankban aktualis->kovetkezo= (lista_tipus*)malloc(sizeof(lista_tipus)); //Uj elem aktualis->kovetkezo->kovetkezo=; //Lista vege aktualis=aktualis->kovetkezo; //Az uj elem legyen aktualis //Az uj elem ertekeinek beallitasa //a beolvasott ertekek alapjan - 3 -

Ha később fel akarjuk használni ezt a láncolt listát, végig kell tudnunk menni a lista elemein. Például akkor van ere szükség, ha ki akarunk keresni a listából egy elemet, vagy ki akarjuk íratni az összes elemet a képernyőre. A lista elemeit kiírató kód: aktualis=fej; while(aktualis!=) printf("%d %s\n", aktualis->szam, aktualis->szoveg); - 4 -

A fent megírt kódokat azonban lehet rövidebben is. Ezt szeretném megmutatni ezen az oldalon: struct lista_struct *kovetkezo; lista_tipus; lista_tipus ; lista_tipus ; //Fajlbol valo beolvasas és lista felepitese f=fopen("adat.txt", "r"); fej=; while(fscanf(f,"%d %s",&beolvasott_szam,beolvasott_szoveg)!=eof) if(fej==) fej=aktualis=(lista_tipus*)malloc(sizeof(lista_tipus)); else aktualis=aktualis->kovetkezo=(lista_tipus*)malloc(sizeof(lista_tipus)); aktualis->kovetkezo=; //Az uj elem ertekeinek beallitasa a beolvasott ertekek alapjan //Az adatok kiiratasa a listabol a kepernyore for(aktualis=fej;aktualis!=;aktualis=aktualis->kovetkezo) printf("%d %s\n", aktualis->szam, aktualis->szoveg); A megértéshez érdemes ismerni a for működését: Inicializáló kifejezés: Ez hajtódik végre for( ; feltétel Ez hajtódik végre ; ) ciklusmag ; a ciklusmag első végrehajtása előtt. Léptető kifejezés: a ciklusmag összes többi végrehajtása előtt. - 5 -

Ha akarunk, alkalmazhatunk egy úgynevezett strázsát, vagyis egy olyan elemet, ami nem tartalmaz lényeges adatot, de a lista első elemeként fog szolgálni (a fej helyett). strázsa Lehet, hogy ez a kód könnyebben érthető azok számára, akik az előzőket még nem értették meg. struct lista_struct *kovetkezo; lista_tipus; lista_tipus strazsa; //A strazsa nem pointer, ezert mar itt letrejon lista_tipus ; //Fajlbol valo beolvasas és lista felepitese f=fopen("adat.txt", "r"); aktualis=&strazsa; //A strazsatol kezdjuk felepiteni a listat while(fscanf(f,"%d %s",&beolvasott_szam,beolvasott_szoveg)!=eof) //Hely foglalasa uj elemnek //es legyen az uj elem az aktualis aktualis=aktualis->kovetkezo=(lista_tipus*)malloc(sizeof(lista_tipus)); //Az uj elem legyen a lista vege aktualis->kovetkezo=; //Az uj elem ertekeinek beallitasa a beolvasott ertekek alapjan //Az adatok kiiratasa a listabol a kepernyore //(a strazsat kihagyjuk, utana kezdjuk el a kiiratast) for(aktualis=strazsa.kovetkezo;aktualis!=;aktualis=aktualis->kovetkezo) printf("%d %s\n", aktualis->szam, aktualis->szoveg); verzió 1.0b 2010--07-6 - Ez a dokumentum folyamatos fejlesztés alatt áll. A hibákat, észrevételeket, ötleteket örömmel fogadom! Retzler Andris SCH1702 retzlerandras@gmail.com