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

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

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)

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

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

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

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

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

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.

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 10. gyakorlat. Standard függvények. Union

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

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

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 alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

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

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

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

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

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

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

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.

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

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

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

INFORMATIKA javítókulcs 2016

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

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

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

Programozas 1. Strukturak, mutatok

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

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

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

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

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

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

Programozás I gyakorlat

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

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

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

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

Programozás II. Fájlkezelés

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

2018, Funkcionális programozás

Egyirányban láncolt lista

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

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

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

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

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

1. Alapok. Programozás II

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Programozási segédlet

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

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:

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

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 Listák. Adat1 Adat2 Adat3 ø. Adat1 Adat2 ø Adat3

8. gyakorlat Pointerek, dinamikus memóriakezelés

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

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

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Programozás I gyakorlat

Bevezetés a C++ programozási nyelvbe

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

Szövegek C++ -ban, a string osztály

Táblázatok fontosabb műveletei 1

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

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

A programozás alapjai 1 Rekurzió

Programozás I. zárthelyi dolgozat

Bevezetés a C++ programozási nyelvbe

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

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

Adatbázis rendszerek Gy: Algoritmusok C-ben

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

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

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

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

BASH SCRIPT SHELL JEGYZETEK

Információs Technológia

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

C++ programozási nyelv

7/8. gyakorlat Karaktertömbök és sztringkezelés

Programozási Nyelvek: C++

5. Gyakorlat. struct diak {

Programozási nyelvek Java

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

Programozás C és C++ -ban

INFORMATIKA tétel 2019

INFORMATIKA tétel 2017

Jelszavak helyes megválasztása, szótáras törés. Pánczél Zoltán

Pénzügyi algoritmusok

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

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

Információs Technológia

Átírás:

Programozás alapjai C nyelv 8. gyakorlat Szeberényi Imre BME IIT <szebi@iit.bme.hu> Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény memóriában levő helye (címe) képezhető. (pl: &valtozo) Ez a cím ún. pointerben vagy mutatóban tárolható. A pointer egy olyan típus, amelynek az értékkészlete cím, és mindig egy meghatározott típusú objektumra mutat. int i, *ip; float f, *fp; int-re mutató pointer float-ra mutató pointer ip = &i; fp = &f; Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -2- Indirekció (ism) int i; 13 *ip = 13; float f; int *ip; ip = &i i cime Memória float *fp; Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -3-

Néhány dolog érthetőbb (ism.) Scanf-nél az & jelentése? Miért nincs tömbök között értékadás. (t1 = t2)? Tömb, mint fv. paraméter. Miért nem hibás az if ( alma == alma ) utasítás, de mégsem működik? Miért hibás a... case alma : utasítás? Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -4- Dinamikus adatszerkezet Az adatok száma nem ismert előre. Nem tudunk vagy nem akarunk feleslegesen helyet foglalni az adatoknak. A feladat dinamikusan változhat. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -5- Változók a memóriában int i; float f; int *ip; float *fp; Halom (heap) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -6-

malloc() hatása int i; float f; int *ip; float *fp; cím fp = malloc(sizeof(float)); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -7- Allokált terület használata int i; float f; int *ip; float *fp; cím fp = malloc(sizeof(float)); 3.14 *fp = 3.14 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -8- malloc() standard függvény <stdlib.h> void *malloc(size_t size); void free(void *p); A malloc lefoglal a dinamikus területen egy, a paramétereként kapott méretű területet. Visszaadja a lefoglalt terület kezdőcímét, hiba eseten -t. Afreefelszabadítja a lefoglalt területet. Nincs ellenőrzés! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -9-

Ujabb malloc int i; float f; int *ip; float *fp; cím fp = malloc(sizeof(float)); 3.14 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -10- Elveszett!!! Van megoldás? Minden dinamikus változóhoz saját pointer kell, egyébként nem érhető el az adat! Mégis kell tudni előre az adatok számát? Hol van itt az ígért rugalmasság? Miért nem tárolhatom a pointert együtt az adattal? LÁNCOLT szerkezet! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -11- Önhivatkozó struktúra struct elem int i; struct elem *kov; e, *p; Miért kell a zárójel? e.i = 8; p = &e; (*p).i = 12; p->i = 12; Szemléletesebb Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -12-

Lánc kialakítása typedef struct elem int i; struct elem *kov; elem_t; elem_t *kezd; kezd = malloc(sizeof(elem_t)); kezd->i = 35; kezd->kov = malloc(sizeof(elem_t)); kezd->kov->i = 88; 35 88 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -13- Láncolt adatszerkezet Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -14- Duplán láncolt adatszerkezet 1 2 NIL Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -15-

Rendezve építés 2 15 32 634 8 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -16- Feladat 1 Olvassunk be a standard inputról fájl végéig egész számokat, és írjuk ki azokat fordított sorrendben! A nem számjegy karaktereket tekintsük elválasztónak és dobjuk el! Tárolnunk kell, mert az utolsó adatot kell először kiírni. Mivel az input adatok számát előre nem ismerjük, dinamikus adatszerkezetet kell használnunk! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -17- Vázlat (adatszerkezet) typedef struct lanc_str int i; struct lanc_str *kov; lanc_elem, *lanc_poi; struktúra típus pointer típus Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -18-

Vázlat (algoritmus) I I I I I I I I Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -19- Vázlat (algoritmus) kezdo = while olvas(i) kezdo = lancol(kezdo, i) kiir(kezdo) (olvas(i) beolvassa a következő egész értéket és hamis fv.értékkel jelzi, ha fájl vége volt. A nem számjegy karaktereket elválasztónak tekinti és eldobja.) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -20- Függvény spec. - beolvas int olvas(int *i); Int értékű függvény, beolvassa a következő egészet a standard inputról. A nem számjegy karaktereket eldobja. bemenet: standard input kimenet: függvényérték: hamis (0), ha fájl vége volt az olvasott egész (változó paraméter hiányában címet kell átadni) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -21-

Függvény spec. - lancol lanc_poi lancol(lanc_poi p, int i); A paraméterként kapott lánc elejére felvesz egy új elemet, amelybe az integer paraméterként kapott értéket teszi. bemenet: lánc elejére mutató pointer., ha üres felveendő érték kimenet: függvényérték: lánc elejére mutató pointer,, ha elfogyott a memória Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -22- Függvény spec. - kiir void kiir(lanc_poi p); Void függvény (eljárás) a paraméterként kapott láncot kiírja bemenet: lánc elejére mutató pointer., ha üres kimenet: standard output Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -23- Implementáció - lancol lanc_poi lancol(lanc_poi p, int i) lanc_poi uj; if (uj = malloc(sizeof(lanc_elem))) uj->i = i; /* érték beírása */ uj->kov = p; /* befűz az elejére */ return(uj); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -24-

Implementáció - kiir void kiir(lanc_poi p) while (p!= ) printf( %6d, p->i); /* érték kiírása */ p = p->kov; /* következőre */ Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -25- Implementáció - beolvas int olvas(int *i) int r ; while ((r = scanf( %d, i)) == 0) scanf( %*c ); return(r!= EOF); csillag jelentése a formátumlistán Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -26- Implementáció - program #include <stdio.h> #include <stdlib.h> typedef struct lanc_str int i; struct lanc_str *kov; lanc_elem, *lanc_poi; alprogramok Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -27-

Implementáció - program main() int n; lanc_poi kezdo = ; while (olvas(&n)) kezdo = lancol(kezdo, n); kiir(kezdo); Meg kellene vizsgálni, hogy -e! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -28- Feladat 2 Olvassunk be a standard inputról file végéig egész számokat, és írjuk ki azokat nagyság szerint rendezve! (Az előző feladathoz hasonlóan a nem számjegy karaktereket tekintsük elválasztónak és dobjuk el!) Tárolnunk kell a rendezés miatt. Mivel az input adatok számát előre nem ismerjük, dinamikus adatszerkezetet kell használnunk! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -29- Megoldási alternatívák Láncot építünk és utólag rendezzük. túl sok pointert kell egyszerre kezelni: 12 23 15 41 Nem okos megoldás! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -30-

Megoldási alternatívák Rendezve építjük a láncot 12 25 35 41 15 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -31- Vázlat (algoritmus) kezdo = while olvas(i) kezdo = beszur(kezdo, i) kiir(kezdo) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -32- Alprogram spec. - beszur lanc_poi beszur(lanc_poi kp, int i); A paraméterként kapott láncba beszúr egy új elemet, amelybe az integer paraméterként kapott értéket teszi. bemenet: lánc elejére mutató pointer., ha üres felveendő érték kimenet: függvényérték: lánc elejére mutató pointer,, ha elfogyott a memória Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -33-

Beszúrás a láncba Három különböző eset van: Új elem a lánc belsejébe kerül. Új elem a lánc elejére kerül. Új elem a lánc végére kerül. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -34- Beszúrás a lánc belsejébe 12 25 35 41 15 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -35- Beszúrás a lánc elejére 12 25 35 41 9 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -36-

Beszúrás a lánc végére 12 25 35 41 151 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -37- A megfelelő hely keresése Módosítani kell! 12 25 35 41 p = kezd; while (p!= && p->i < i) p = p->kov; 34 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -38- Lemaradó pointer 12 25 35 41 pl = kezd; p = kezd; while (p!= && p->i < i) pl = p; p = p->kov; 34 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -39-

Implementáció - beszúr lanc_poi beszur(lanc_poi kp, int i) lanc_poi uj, p, pl; uj = malloc(sizeof(lanc_elem)); if (uj == ) return(); uj->i = i; p = kp; pl = p; while (p!= && p->i < i) pl = p; /* lemaradó poi. */ p = p->kov; /* futó poi. */ Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -40- Implementáció - beszúr if (p == kp) kp = uj; /* elejére kell */ else pl->kov = uj; /* nem az elejére */ uj->kov = p; /* új mögötti rész */ return(kp); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -41- Implementáció - program alprogramok main() Precedencia! int n; lanc_poi kezdo = ; while (olvas(&n)) if ((kezdo = beszur(kezdo, n)) == ) printf( Elfogyott a memória\n), exit(1); kiir(kezdo); Vessző op.! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -42-

Miért kell figyelni az elejét? Külön kezelést igényel, mert a kezdo nem dinamikus változó, de a többi pointer igen, azaz: kezdo = valami, de a többi esetben p->kov = valami Ötlet: Tegyünk a lánc elejére egy kamu elemet! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -43- Láncolt lista strázsával????? 25 35 41 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -44- Implementáció - beszúr2 lanc_poi beszur2(lanc_poi kp, int i) lanc_poi uj, p, pl; Elöl van strázsa! uj = malloc(sizeof(lanc_elem)); if (uj == ) return(); uj->i = i; pl = kp; p = kp->kov; while (p!= && p->i < i) pl = p; p = p->kov; Egyszerűbb! pl->kov = uj; uj->kov = p; return(uj); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -45-

Implementáció - kiir2 void kiir2(lanc_poi p) p = p->kov; /* strázsa átlépése */ while (p!= ) printf( %6d, p->i); /* érték kiírása */ p = p->kov; /* következőre */ Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -46- Implementáció - program2 alprogramok main() int n; lanc_poi kezdo = malloc(sizeof(lanc_elem)); kezdo->kov = ; /* strázsa létrehozása */ while (olvas(&n)) kezdo nem változik if (beszur2(kezdo, n) == ) printf( Elfogyott a memória\n), exit(1); kiir2(kezdo); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -47- Miért kell a lemaradó pointer? A megtalált elem elé kell beszúrni. Ötlet: Szúrjuk be mögé az új elemet, és abba tegyük át a régi elemet! Ezután a régi elembe írhatjuk az új értéket! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -48-

Hova kell strázsa? Az elejére sohasem szúrunk be, mert ha az első elem elé kellene, akkor is az elem mögé vesszük fel az új struktúrát. Az elejére ezért nem kell strázsa. Csak egy pointert akarunk használni, és nem engedjük meg, hogy az értéket vegyen fel. A lánc végén ezért van strázsa. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -49- Beszúrás másolással 12 25 15 35 41 15 beszúrása 25???? ne fussunk le a láncról Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -50- Implementáció - beszúr3 lanc_poi beszur3(lanc_poi p, int i) lanc_poi uj; uj = malloc(sizeof(lanc_elem)); if (uj == ) return(); while (p->kov!= && p->i < i) p = p->kov; *uj = *p; /* teljes struktúrát másolja */ p->i = i; /* beír a régibe */ p->kov = uj; /* beláncolja az újat */ return(p); strázsa hátul van Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -51-

Implementáció - kiir3 void kiir3(lanc_poi p) while (p->kov!= ) /* hátul van a str. */ printf( %6d, p->i); /* érték kiírása */ p = p->kov; /* következőre */ Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -52- Implementáció - program3 alprogramok main() int n; lanc_poi kezdo = malloc(sizeof(lanc_elem)); kezdo->kov = ; /* strázsa létrehozása */ while (olvas(&n)) kezdo nem változik if (beszur3(kezdo, n) == ) printf( Elfogyott a memória\n), exit(1); kiir3(kezdo); a str. miatt másik kiíró kell Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -53- Mikor használható ez a trükk? Ha az adat nem nagy, ugyanis minden beszúráskor a teljes struktúrát lemásoljuk. Nagy méretű adat esetén (>2-3Kb) ez számottevő idő lehet. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -54-

Összefoglalás Dinamikus területen tetszőleges számú adat hozható létre (malloc). Minden ilyen adat egy pointeren keresztül érhető el. Láncolt adatszerkezet ötlete a következő adat pointerét az előző adat mellett tároljuk Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -55- Láncolt szerkezet tulajdonságai Előnyök: elvileg tetszőlegesen sok adat tárolható nem kell előre meghatározni az adatok számát rendezés egyszerű, többnyire az építés már rendezetten történik az adatkapcsolatok jól ábrázolhatók Hátrányok: az adat mellett még egy pointert is tárolni kell nem érhető el tetszőleges sorrendben az adat könnyű elszakítani a láncot (hibás kezelés) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -56-