Informatika2-2012/Hazi06

A MathWikiből
A lap korábbi változatát látod, amilyen Ador (vitalap | szerkesztései) 2012. március 22., 13:30-kor történt szerkesztése után volt.
(eltér) ←Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

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