[ flx @ 07.01.2005. 14:23 ] @
Imam jedno opste pitanje.
Gde se najcesce i zasta upotrebljavaju liste iz C-a?

Hvala.


[Ovu poruku je menjao filmil dana 16.01.2005. u 12:58 GMT+1]
[ WEXY @ 08.01.2005. 00:25 ] @
Liste su u stvari ništa drugo do nizovi, međutim razlikuju se i zbog toga se najčešće koriste jer veličina niza kreirana pomoću ulančanih listi ne mora biti poznata na početku izvršavanja programa kao što je to slučaj sa običnim nizovima. Znači možeš im usvakom momentu povećati ili smanjiti broj članova.

Takođe korisne su i ako ti treba niz sa kojim ćeš moći lako da manipulišeš u smislu ubacivanja i izbacivanja članova, samo je potrebno da dealociras memoriju i prevežeš susedne članove što nije slučaj sa običnim nizovima kod kojih bi morao da pomeraš članove u levo i pamtiš index svaki put sto dovodi do usporenja, pogotovo ako se radi o većim nizovima. Ubacivanje članova u ulančanu listu je takođe dosta jednostavno, opet je poenta u prevezivanju članova koji će biti susedni tom članu, za razliku od običnih nizova gde je nemoguće (koliko je meni poznato) ubaiciti član i proširiti niz.

Liste mogu da budu jednostruko, dvostruko ulančane i tada se ponašaju kao niz po kome možeš da se kreces u jednom (od početka do kraja) ili u oba smera.

Na sličan način se mogu praviti i liste sa grananjem (kao drvo, sa različitim putanjama, granama) mada to nikad nisam koristio pa o tome može neko drugi da napiše nešto.
[ franticnick @ 09.01.2005. 14:53 ] @
Liste pruzaju veliku slobodu pri radu i mnogo su bolje od nizova. Sve sto je WEXY rekao stoji, samo bih jos predlozio da ako planiras da koristis liste malo proucis STL (Standard Template Library). Pomocu STL-a zivot ce ti biti mnogo laksi.

Radio sam sa listama koje se granaju i ako te bas zanima mogu da iskopam neke skripte i posaljem ovde. Ovakve liste imaju realnu primenu samo u resavanju vrlo retkih i specificnih problema. Mala je verovatnoca da ce ti ikada zatrebati.
[ Dejan Lozanovic @ 09.01.2005. 15:38 ] @
Citat:
WEXY: Na sličan način se mogu praviti i liste sa grananjem (kao drvo, sa različitim putanjama, granama) mada to nikad nisam koristio pa o tome može neko drugi da napiše nešto.


Pa liste sa grananjem ili drveta kako su krstili po domacoj literaturi su dobra jer problem koji traje N ciklusa oni obicno spuste na log N. Sto je znacajno ubrzanje. Primera radi zamisli listu od milion clanova ( recimo registarske tablice na automobilima), i sada ako ti treba neki broj recimo 350472

ti treba da u listi da protrcis kroz 350472 clana dok ne naidjes na pravi, dok kod binarnog drveta u prvom koraku si na vrhu stabla tj rcimo na broju 500 000, levi clan pokazuje manju cifru a desni vecu znaci skok na levi clan bi te odveo do broja 250 000 a desni na 750 000. Pa ona skocis na onaj levo koji je na 250 000, zatim odatle levo skaces na 125 000 a desno na 375 000 itd... i na taj nacin ti si kroz 10-15 koraka dosao do trazenog broja :). Ovakvi algoritmi se dosta koriste recimo kod pravljenja baza podataka i kreiranja njihovih indeksa.
[ flx @ 09.01.2005. 16:07 ] @
Ljudi hvala puno na odgovorima.
franticnick ako ti nije tesko da to okacis ovde,voleo bih da vidim te skripte.

Hvala jos jednom.
[ WEXY @ 09.01.2005. 21:43 ] @
Takođe bi dodao, da je jedini problem sa listama taj sto se nemože direktno prostupiti bilo kojem članu liste već se mora prolaziti kroz celu listu dok ne dođemo do željenog podatka.

@Dejan Lozanovic
Primer je baš pogodak u centar, što se tiče listi sa grananjem :) Meni je padalo na pamet da se takav vid organizacije podataka može iskoristiti za potrebe nekog logičkog povezivanja objekta, npr. gradovi koji su povezani po nekim pravilima se mogu na takav način predstaviti u memoriji, tipa: grad.najbize_mesto, grad.dobija_vodu_iz, grad.dobija_struju_iz itd :)
[ franticnick @ 09.01.2005. 22:12 ] @
Citat:
flx: Ljudi hvala puno na odgovorima.
franticnick ako ti nije tesko da to okacis ovde,voleo bih da vidim te skripte.

Hvala jos jednom.


Dakle, evo linka ka onome sto sam ja nekada ucio :) http://www.puskice.co.yu/lat/treca/strukture_podataka.php.

Hteo sam da ti posaljem moje fajlove ali sam naleteo na ovaj link koji sadrzi daleko vise materijala nego sto ja imam:) Pogledaj fajlove puskica1 i 2. Mislim da tu imas sazeto sve sto ti treba iz ove oblasti (verujem i vise). A tu su i primeri da vidis kako se sve to implementira.

PS
U svakom slucaju hvala i tebi za pitanje, jer nije lose podsetiti se ovih stvari.

Poz.