Sunteți pe pagina 1din 3

Aplicaii cu liste simplu, dublu nlnuite i

circulare implementate dinamic


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

S-ar putea să vă placă și