Informatika2-2012/Hazi06
A MathWikiből
(Változatok közti eltérés)
Ador (vitalap | szerkesztései) (Új oldal, tartalma: „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ányban volt csak …”) |
Ador (vitalap | szerkesztései) |
||
1. sor: | 1. sor: | ||
− | Kétirányba láncolt lista | + | === 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ányban volt csak megoldva a láncolás). Amiken módosítani kell: | Í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ányban 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 (max 40 karakteres) char* nevet, malloc()-cal dinamikusan helyet foglal egy új elemnek, a pointereit NULL-ra állítja és visszaadja az új elemre mutató pointert. | |
− | + | * Írj egy beszúró függvényt ami a kapott listába egy elemet (amit egy pointerrel kap meg), beszúr 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), é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. | |
+ | |||
+ | Ami a gyakorlaton kiadotthoz képest is új feldat: | ||
+ | * Írj függvényt ami kap egy azonosítót, és végigmenve a listán az összes olyan elemet törli a listából ami ilyen azonosítóval rendelkezik. Persze a lánc "maradjon egyben", vagyis minden törlés esetén a törölt elem szomszédainak mutatóit át kell állítani hogy egymásra mutassanak. |
A lap 2012. március 22., 14:23-kori változata
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ányban 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 (max 40 karakteres) char* nevet, malloc()-cal dinamikusan helyet foglal egy új elemnek, a pointereit NULL-ra állítja és visszaadja az új elemre mutató pointert.
- Írj egy beszúró függvényt ami a kapott listába egy elemet (amit egy pointerrel kap meg), beszúr 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), é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.
Ami a gyakorlaton kiadotthoz képest is új feldat:
- Írj függvényt ami kap egy azonosítót, és végigmenve a listán az összes olyan elemet törli a listából ami ilyen azonosítóval rendelkezik. Persze a lánc "maradjon egyben", vagyis minden törlés esetén a törölt elem szomszédainak mutatóit át kell állítani hogy egymásra mutassanak.