I. LISTA SIMPLU NLNUIT Lista liniara simplu inlantuita reprezinta o colectie omogena (acelasi tip) de elemente. Elementele listei sunt aranjate liniar. Fiecare element are un succesor (exceptand ultimul) si fiecare element are un predecesor (exceptand primul). Avantajul folosirii listelor consta in gestionarea dinamica a memoriei. Alocarea sau eliberarea nodurilor se face dinamic, la fiecare inserare respectiv stergere, ceea ce face ca nodurile listei sa fie plasate dispersat in memorie (in cazul vectorilor structuri de date omogene alocate static, zona de memorie folosita este contigua). Legatura dintre nodurile invecinate trebuie facuta logic explicit de catre programator, prin pastrarea informatiilor de legatura in fiecare nod (pe langa valoarea utila). ! "eali#ai un p$og$am ca$e conine un meniu p$in inte$mediul c%$uia& a) !e testeaz" dac" o list" este sau nu vid". b) !e creeaz" o list" de numere #ntregi din valorile citite dintr$un fi%ier. c) !" se afi%eze c&eile elementelor din list" (in ordinea de la primul la ultimul). d) !" se afi%eze c&eile elementelor din list" (in ordinea de la ultimul la primul). e) !" se insereze un element la inceputul listei' f) !" se adauge un element la sf(r%itul listei' g) !" se adauge un element dupa al )$lea element din lista. *aca nu exista k elemente in lista se va adauga la sfarsit. &) !" se elimine primul element din list"' i) !" se elimine ultimul element din list"' j) !" se elimine elementul aflat dupa cel de$al k$lea element din lista. *aca nu exista k elemente in lista atunci nu se va realiza stergerea. )) !" se elimine fiecare element din lista (golind practic lista). l) !" caute un element de c&eie dat" #n list"' m) !" #nsumeze elementele pare din list"' n) !" se adauge intre oricare doua elemente consecutive ale listei cate un element nou care sa aiba ca informatie (c&eie) media aritmetica a celor doua valori. o) Ie%ire din aplica+ie. !e consider" structura de date %i prototipurile urm"toarelor func+ii, struct lista- int val' .. in'o$matie sau c(eie lista /leg' 0)p$im' void tipar(lista /rad)' void vida(lista /rad)' void adaugare_varf(lista /1rad 2 , int ))' apel prin adaugare_varf(prim,el); 2 *eclaratia parametrului formal lista )*$ad are dubla semnificatie, (2) rad este de tipul pointer la lista (lista /rad) si (3) rad este transmis prin adresa (lista 1rad) in sensul ca la iesirea din functie capul listei (primul element) poate fi modificat (mai ales daca discutam de inserarea in fata listei). +ompute$ Science and ,lect$ical ,nginee$ing -epa$tment Adrian FLOREA void adaugare_sfarsit(lista /1rad, int ))' void eliminare_varf(lista /1rad)' void eliminare_sfarsit(lista /1rad)' void cautare(lista /rad, int ))' void suma_para(lista /rad)' In 455 pentru alocarea dinamica se utilizeaza urmatori operatori (analog ca in cazul pointerilor), 6peratorul ne. aloca spatiu in /,AP pentru o variabila dinamica. Analog se poate face prin folosirea functiei malloc! lista /7,/p' 78ne. lista' .. alocare dinamica a memoriei 7 8 (lista /)malloc(sizeof(lista)) ' *upa alocare, adresa variabilei se atribuie lui q, unde q este o variabila pointer catre lista. *urata de viata a unei variabile alocate in 9EA: este pana la eliberarea spatiului ocupat (cu operatorul delete sau functia '$ee). '$ee012' 33 eliberarea memoriei (dealocare) delete 7' *upa eliberare, continutul variabilei q devine nedefinit. 3. "eali#ai un p$og$am ca$e citeste dint$4un 'isie$ in$egist$a$i 0numele si prenumele unor studenti avand lungimea 2 c$ea#a o lista simplu inlantuita si a'isea#a di$ect 0de la primul la ultimul2 si in5e$s 0de la ultimul la primul2 'olosind apelu$i de 'unctii $ecu$si5e! !e consider" structura de date, prototipurile si definitia urm"toarelor func+ii, const int lungime 8 ;<' t=pedef struct nod- c&ar nume>lungime?' nod /next' 0@A6*' @A6* /c' void tipa$d(@A6* /l) - if (l B8 ACLL) - coutDDl$EnumeDDFGtF' tipa$d(l$Enext)' 0 0 @A6* /creareHlista(void)' void tipari(@A6* /l)' 6! Sc$iei un p$og$am ca$e implementea#% u$m%toa$ele 'uncii& a) 4reeaz" o list", cu valori citite dintr$un fi%ier' b) Afi%eaz" con+inutul listei, elementele fiind separate prin caracterul I, precum #n exemplul urm"tor, +ompute$ Science and ,lect$ical ,nginee$ing -epa$tment Adrian FLOREA I J I 32; I $K I L I J I $L I 23 I c) :rimind ca parametrii dou" liste, L2 (nevida) %i L3 (vida), transfer" in a doua lista toate elementele din prima care ocupau pozitii pare' d) Av(nd ca parametru o list", verific" dac" aceast" este ordonat"' e) :rimind ca parametrii dou" liste, L2 %i L3 (ambele nevide), verifica daca elementele celor doua liste sunt sortate crescator si le interclaseaza continutul generand ca rezultat o lista sortata' L. Sc$ieti si testati o 'unctie a5and ca pa$amet$u o lista, 'unctie ca$e dete$mina elementul 0si pozitia sa2 cu cele mai multe apa$itii din lista 0primul dintre ele daca sunt mai multe2! 7unctia nu intoa$ce nimic numa$ul ma8im de apa$itii, 5aloa$ea elementului si po#itia in lista 'iind t$ansmise p$in lista de pa$amet$ii! M. Se conside$a o lista ce $etine un 9numar lung:! Ast'el, in'o$matia a'e$enta 'ieca$ui nod din lista este o ci'$a de la ; la <! Sa se sc$ie un p$og$am ca$e aduna, scade si inmulteste doua nume$e lungi! II. LISTA LINIA"A -U=LU NLNUIT 2. S% se sc$ie un p$og$am ca$e implementea#a ce$intele de la p$o>lema I! 'olosind de aceasta data liste du>lu inlantuite! III. LISTA LINIA"A +I"+ULA"A In ca#ul listelo$ ci$cula$e t$e>uie 'acuta legatu$a int$e ultimul si p$imul element ast'el& 0ultim->leg = prim2! 2. "e#ol5ati Problema lui osep!us cu lista linia$a ci$cula$a! Cn grup de n copii se a%eaz" #n cerc, se numeroteaz" #n sens orar cu 2, 3,...,n %i rostesc o formul" de selec+ie de tip Nala bala portocala OF. Fiec"ruia, #ncep(nd cu primul, i se asociaz" un cuv(nt din formula de selec+ie. 4el care prime%te ultimul cuv(nt este eliminat din cerc. Pocul continu", #ncep(nd formula de selec+ie de la urm"torul copil, p(n" c(nd se elimin" to+i copiii. Folosind numerotarea ini+ial", s" se afi%eze ordinea ie%irii copiilor din joc. =I=LI?@"A7I, >Ior<M? Io$ga A!, ?pinca$u +!, St$atan +!, +(i$i% A! QStructuri de date i algoritmi. Aplicaii n !"" folosind S#$F, Editura :olirom, 3<<M. >@ud<R? Tudo$ S! Q%nformatica. !urs pentru clasele a %&'a i a &'aF, Editura L1! IAF6$SA@, 3<<R. >AegKJ? Neg$escu L! Q$imba(ul !. )anual pentru clasa a &%'aF, Editura 4omputer Libris Agora, 2KKJ. +ompute$ Science and ,lect$ical ,nginee$ing -epa$tment Adrian FLOREA