Informatika2-2012/Gyakorlat06

A MathWikiből
(Változatok közti eltérés)
(Kétirányba láncolt lista)
a (Kétirányba láncolt lista)
30. sor: 30. sor:
 
* Legyen egy függvény ami a lista utolsó elemét adja vissza (A lista struktúrában legyen mutató az utolsó elemre is)
 
* Legyen egy függvény ami a lista utolsó elemét adja vissza (A lista struktúrában legyen mutató az utolsó elemre is)
 
* Írj függvényt ami kap egy listát és egy azonosítót, és visszaadja az azonosítóhoz tartozó nevet ha talált ilyen azonosítót a listában (elölről keressen, az első találtaot adja vissza, ha nem talált semmit akkor üres stringet)
 
* Írj függvényt ami kap egy listát és egy azonosítót, és visszaadja az azonosítóhoz tartozó nevet ha talált ilyen azonosítót a listában (elölről keressen, az első találtaot adja vissza, ha nem talált semmit akkor üres stringet)
* Írj egy beszúró függvényt ami a kapott listába a kapott azonosítóval és névvel beszúr egy elemet, arra a helyre ahová név szerint rendezve be kell tenni. Haszáld az előző feladatben megírt függvényt (vagy a string.h-ból az "strcmp()"-t). Ha üres volt eddig a lista (a kezdőelem és az utolsó elem pointer is NULL) akkor persze csak vedd fel ezt az elemet elsőként és utolsóként is. Ha nem volt üres a lista, akkor figyelj arra hogy minden pointert jól átállíts! A beszúrt elem előtti elem "kovetkezo" mutatója az új elemre mutasson, és a beszúrt elem utáni elem "elozo" pointere is az új lemere mutasson (eddig egymásra mutattak). És persze az újonnan beszúrt elem mutatóit is be kell állítani.
+
* Írj egy "uj_elem()" függvényt ami megkap egy long azonosítót és egy char* nevet, ''malloc()''-cal dinamikusan helyet foglal egy új elemnek, a pointereit NULL-ra állítja és visszaad egy új elemre mutató pointert.
* A main() függvényben egy for ciklusban kérj be a felhasználótól (egyszavas) neveket és long típusú azonosítókat (4 darabot), és a rendezve beszúró függvénnyel szúrd be őket a listába. Végül írasd ki a lista elemeit a láncolás szerinti sorrendben.
+
* Írj egy beszúró függvényt ami a kapott listába egy elemet (amit egy pointerrel kap meg), arra a helyre ahová név szerint rendezve be kell tenni. Haszáld az előző feladatben megírt függvényt (vagy a string.h-ból az "strcmp()"-t). Ha üres volt eddig a lista (a kezdőelem és az utolsó elem pointer is NULL) akkor persze csak vedd fel ezt az elemet elsőként és utolsóként is. Ha nem volt üres a lista, akkor figyelj arra hogy minden pointert jól átállíts! A beszúrt elem előtti elem "kovetkezo" mutatója az új elemre mutasson, és a beszúrt elem utáni elem "elozo" pointere is az új lemere mutasson (eddig ezek egymásra mutattak). És persze az újonnan beszúrt elem mutatóit is be kell állítani.
 +
* A main() függvényben egy for ciklusban kérj be a felhasználótól (egyszavas) neveket és long típusú azonosítókat (4 darabot), ''malloc''-cal helyet foglal nekik, és a rendezve beszúró függvénnyel szúrd be őket a listába. Végül írasd ki a lista elemeit a láncolás szerinti sorrendben.

A lap 2012. március 21., 18:37-kori változata

(Akinek nem sikerült múltkor végigérnie a feladatsoron az kezdheti az 5. gyakorlat utolsó (stringes) feladatával, onnan legalább az első pöttyöt mindenkinek meg kell tudnia oldani, és a ZH-hoz nem fog ártani a stringek kezelésének gyakorlása.)

String-összehasonlítás

Írj függvényt ami megkap két stringet (mutatókkal), és 1-et ad vissza ha az első a nagyobb (lexikografikus rendezés, vagyis ABC-rend szerint), -1-et ad ha a második a nagyobb, és 0-t ad ha egyforma a két string. A kapott stringeket még véletlenül se változtassa meg a függvény, ezért legyenek konstansok a paraméterek:

int nagyobb_str(const char *s1, const char *s2) {
...
}

A függvény megírása után teszteld is néhányféleképpen a main() függvényedből meghívva az összehasonlítót. Pl:

char egyik[20] = "abrakadabra";
char masik[10] = "sotetkek";
int n = nagyobb_str(egyik, masik)

Ezután n-nek -1 értékűnek kell lennie mert a másik string a nagyobb.


Kétirányba láncolt lista

Írj programot, ami megvalósít egy kétirányba láncolt listát! Kiindulhatsz az előadáson vett kódból (ott egy irányba volt csak megoldva a láncolás). Amiken módosítani kell:

  • A listaelemekben legyen az azonosítón kívül egy max. 40 karakteres "nev" is eltárolva
  • Kétirányúsítás: a listaelemekben legyen még egy pointer ami az előző elemre mutat a listában (a lista elő eleménél ez NULL)
  • Legyen egy függvény ami a lista utolsó elemét adja vissza (A lista struktúrában legyen mutató az utolsó elemre is)
  • Írj függvényt ami kap egy listát és egy azonosítót, és visszaadja az azonosítóhoz tartozó nevet ha talált ilyen azonosítót a listában (elölről keressen, az első találtaot adja vissza, ha nem talált semmit akkor üres stringet)
  • Írj egy "uj_elem()" függvényt ami megkap egy long azonosítót és egy char* nevet, malloc()-cal dinamikusan helyet foglal egy új elemnek, a pointereit NULL-ra állítja és visszaad egy új elemre mutató pointert.
  • Írj egy beszúró függvényt ami a kapott listába egy elemet (amit egy pointerrel kap meg), arra a helyre ahová név szerint rendezve be kell tenni. Haszáld az előző feladatben megírt függvényt (vagy a string.h-ból az "strcmp()"-t). Ha üres volt eddig a lista (a kezdőelem és az utolsó elem pointer is NULL) akkor persze csak vedd fel ezt az elemet elsőként és utolsóként is. Ha nem volt üres a lista, akkor figyelj arra hogy minden pointert jól átállíts! A beszúrt elem előtti elem "kovetkezo" mutatója az új elemre mutasson, és a beszúrt elem utáni elem "elozo" pointere is az új lemere mutasson (eddig ezek egymásra mutattak). És persze az újonnan beszúrt elem mutatóit is be kell állítani.
  • A main() függvényben egy for ciklusban kérj be a felhasználótól (egyszavas) neveket és long típusú azonosítókat (4 darabot), malloc-cal helyet foglal nekik, és a rendezve beszúró függvénnyel szúrd be őket a listába. Végül írasd ki a lista elemeit a láncolás szerinti sorrendben.
Személyes eszközök