Documente Academic
Documente Profesional
Documente Cultură
- 2013 -
Cuprins
1. Structuri dinamice de date. Liste 2. Grafuri 3. Structuri arborescente 4. Elemente de programare orientat obiect
"rgani#area de tip list - la ni$elul fiec rei componente e%ist suficient informa&ie pentru identificarea urm toarei componente a colec&iei. 'atele unei mul&imi structurate prin intermediul listelor s(nt referite de obicei prin termenii de noduri) celule) componente etc.
static - prin intermediul structurii de date $ector ,in C) fol. un masi$ unidimensional- ordinea componentelor este dat de ordinea pe domeniul de $alori corespun# tor inde% rii .i) (n consecin& ) urm toarea component este implicit specificat .
I
Dezavantaje:
p
$olumul de calcule necesare efectu rii opera&iilor de inserare/eliminare de noduri necesitatea p str rii unei #one de memorie alocat ) indiferent de lungimea efecti$ a listei Solutie+ utili#area structurilor dinamice.
dinamic - componentele unei liste dinamice s(nt omogene) de tip articol - fiecare nod este o structur eterogen ) a$0nd+ -1 o parte de informa&ie -1 c(mpuri de leg tur ,c.l.-. - c.l.2urile permit identificarea celulelor $ecine si sunt date de tip referin& ,adres -.
listele cu un singur c(mp de leg tur $aloarea c(mpului indic adresa nodului urm tor
listele cu dubl leg tur $alorile memorate (n c(mpurile de leg tur s(nt adresele componentelor care preced .i urmea# celulei.
typedef struct NOD { int inf; struct NOD *ld, *ls; } *PTNOD;
Par ur!erea"a#isarea $atelor memorate intr-o lista Re!%sirea no$ului ,dac e%ist - care corespunde unei c5ei date ,condi&ie impus asupra $alorii c(mpului de informa&ie&nserarea unei noi componente (n list 'liminarea componentei ,componentelor- cu proprietatea c $alorile c(mpurilor de informa&ie satisfac o anumit cerin& &nlo uirea c(mpului de informa&ie corespun# tor unei componente printr-o informa&ie dat ,modificat -. 9ccesarea componentelor unei liste repre#entat printr-o structur stati % poate fi reali#at + p sec$en&ial p direct) utili#(nd $alorile indicelui considerat pentru inde%are. 9ccesarea componentelor unei liste $inami e se reali#ea# se venial ,(ncep(nd cu prima component .i continu(nd cu urm toarele) pe ba#a $alorilor c(mpurilor de leg tur -. Conv.: cap pri! al listei dinamice este pointerul a c rui $aloare este adresa pri!ei co!ponente a listei.
:unc&ia C afisare implementea# parcurgerea unei liste dinamice pentru afisare Lista repre#entat prin structur dinamic simplu (nl n&uit I void afisare"PTNOD pri!# I {PTNOD p; I p$pri!; I %&ile "p# I { printf "'(t)d', p*+inf#; I p$p*+leg; I } I } Lista repre#entat prin structur dinamic dublu (nl n&uit I void afisare,"PTNOD pri!# I {PTNOD p; I p$pri!; I %&ile"p# I { printf"'(t)d', p*+inf#; I p$p*+ld; I } I }
:unc&ia C cauta calculea# adresa nodului (n care este g sit elementul c utat. 'ac $aloarea c utat nu se reg se.te printre elementele listei) func&ia returnea# $aloarea 78LL.
">S+ se poate a?unge la dep .irea spa&iului disponibil de memorie @1 se $erifica dac este posibil inserarea sau nu ,dac se poate aloca spa&iu de memorie pentru componenta de inserat-. ,ema: inserarea pentru listele dublu inlantuite
&nserarea la (n eputul listei :unc&ia C inserare-la-inceput returnea# + p 1 - dac ad ugarea unui nou element este posibil ,spa&iul de memorie este suficient pentru o nou alocare-) p 0 2 altfel. An ca#ul (n care inserarea este posibil ) prin apelul func&ii este reali#at ad ugarea unui nou nod la (nceputul listei.
:unc&ia C inserare-la-sfarsit returnea# ,3EB9 pentru acasap 1 - dac .i numai dac este posibil o inserare)
p
0 - altfel.
.e/i 0102C3T345 ,-6 "7ig. de !ai 8os# .e/i 0102C3T345 ,-9 pentru inserarea inaintea unui nod dat
prima component ultima component prima component care (ndepline.te o anumit condi&ie) componenta care precede/urmea# primei componente care (ndepline.te o condi&ie dat .
Este necesar +
p p
$erificarea e%isten&ei (n lista considerat a componentei ce trebuie eliminat . testarea faptului c lista prelucrat este $id sau nu.
!nforma&ia info ata.at nodului eliminat din list repre#int dat de ie.ire pentru orice modul de eliminare) (n ca#ul (n care i nu este cunoscut (naintea elimin rii ,de e%emplu) atunci c(nd este solicitat eliminarea unei celule care con&ine o informa&ie dat - . Eliminarea unui nod p poate fi reali#at +
p
logic - eliminarea logic a celulei p este efectuat e%clu#(nd p din lista dinamic prin+
I I
setarea leg turii nodului care precede p pe adresa succesorului lui p) dac p nu este adresa primului element al listei) cap) respecti$ prin atribuirea adresei primului element al listei cu cap*+leg) (n ca# contrar.
fi/ic : eliminarea cu .tergere fi#ic a unui nod p presupune redenumirea acelui nod (n scopul eliber rii memoriei ocupate de p .i efectuarea opera&iilor descrise (n cadrul procesului de eliminare logic .
An anumite situa&ii este preferabil renun&area la structura de tip linear a listelor .i utili#area unei leg turi de la ultima component c tre capul listei) re#ult(nd structura de list< circular<. 5vantaj: posibilitatea de accesare oric rui alt element al listei pornind din orice element. 'ac nodul c utat este situat+
dup nodul curent) este ini&iat un proces de c utare similar listelor lineare. p inainte de nodul curent) nodul poate fi accesat prin parcurgerea listei de la primul s u element) care) (n procesul de c utare) este atins dup parcurgerea (n (ntregime a listei) (ncep(nd de la nodul curent.
p
I I
I I I I
Parcurgere) populare si afisare,$e#i E<E*C!3!8L 2=0!nserare la inceput ,$e#i E<E*C!3!8L 2=1!nserare nod dupa un nod cu $aloarea data ,$e#i E<E*C!3!8L ,2=2Stergere primul nod ,$e#i E<E*C!3!8L 2=3!nserare la sfarsit ,3EB9Stergere la sfarsit ,3EB9Cauta in lista ,3EB9-
1.4.1. 6tiva
I
stiv< - o list liniara) organi#at a.(. opera&iile de inserare .i eliminare s(nt permise numai la prima component . 9cest mod de organi#are corespunde unei gestiuni L!:" ,Last !n :irst "ut- a informa&iei stocate. "pera&iile de ba# efectuate+ reali#ate similar ca#ului listelor dinamice lineare) &in(nd cont c inserarea/ e%tragerea unui element s(nt posibile numai (n prima po#i&ie ,tema 2 $e#i cap F1.2-. 9daugarea unui nod intr-o sti$a ,L!:"- ,;e#i E<E*C!3!8L 1=11-
1.4.2. +oa$a
I
op. de inserare este permis la ultima component ) si opera&ia de eliminare este permis numai la prima component .
9cest mod de organi#are corespunde unei gestiuni :!:" ,:irst !n :irst "ut- a informa&iei stocate. !mplementare+
p p
printr-o structur static ,masi$ unidimensional-) sau printr-o structur dinamic de tip list .
Pentru optimi#area opera&iilor de inserare/e%tragere) (n ca#ul implement%rii ozilor prin stru turi $inami e lineare) este necesar utili#area a dou informa&ii+
p p p p
adresa primei componente .i adresa ultimei componente. utili#area a doi pointeri sau prin utili#area unui pointer .i a unei structuri de list circular . sau $ariant alternati$ este ob&inut prin considerarea unei liste circulare) cu memorarea adresei ultimului element.
An continuare s(nt pre#entate opera&iile de inserare .i e%tragere a unei informa&ii dintr-o list liniar de tip coad .
E%ercitii
I
Pentru e%ercitii desc5ideti fisierul GE%ercitii=liste6 si re#ol$ati pe ba#a indicatiilor e%ercitiile propuse.