Informatika2-2012/Hazi06

A MathWikiből
(Változatok közti eltérés)
(Ú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 …”)
 
(Kétirányba láncolt lista)
 
(egy szerkesztő 2 közbeeső változata nincs mutatva)
1. sor: 1. sor:
Kétirányba láncolt lista
+
=== Kétirányba láncolt lista ===
 +
 
 +
''(A határidő a ZH miatt április 2. hétfő éjfél.)''
  
 
Í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
+
* 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)
+
* 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)
+
* 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 "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 "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.
+
* Í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 a 6. gyakorlaton 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 elemre 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 main() függvényben egy for ciklusban kérj be a felhasználótól (egyszavas) neveket és long típusú azonosítókat (5 darabot), és a rendezve beszúró függvénnyel szúrd be őket a listába, és írasd ki a lista elemeit a láncolás szerinti sorrendben.

A lap jelenlegi, 2012. március 22., 13:30-kori változata

Kétirányba láncolt lista

(A határidő a ZH miatt április 2. hétfő éjfél.)

Í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 a 6. gyakorlaton 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 elemre mutasson (eddig ezek egymásra mutattak). És persze az újonnan beszúrt elem mutatóit is be kell állítani.

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 main() függvényben egy for ciklusban kérj be a felhasználótól (egyszavas) neveket és long típusú azonosítókat (5 darabot), és a rendezve beszúró függvénnyel szúrd be őket a listába, és írasd ki a lista elemeit a láncolás szerinti sorrendben.
Személyes eszközök