Sunteți pe pagina 1din 28

Programarea calculatoarelor

- 2013 -

Cuprins
1. Structuri dinamice de date. Liste 2. Grafuri 3. Structuri arborescente 4. Elemente de programare orientat obiect

Partea !-a Structuri dinamice de date. Liste

1.1. Reprezentarea listelor (1)


I

"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.

1.1. Reprezentarea listelor (2)


I

*epre#entarea unei liste reali#at +


p

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.

1.1. Reprezentarea listelor (3)


p

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 -.

1.1. Reprezentarea listelor (4)


3ipuri de liste+ I simplu (nl n&uite
p p

listele cu un singur c(mp de leg tur $aloarea c(mpului indic adresa nodului urm tor

dublu (nl n&uite


p p

listele cu dubl leg tur $alorile memorate (n c(mpurile de leg tur s(nt adresele componentelor care preced .i urmea# celulei.

1.1. Reprezentarea listelor (5)


Liste 4desc5ise6 ,lineare- - c(mpul de leg tur pentru indicarea celulei urm toare corespun# tor ultimei componente a listei are $aloarea 78LL Listelor 4(nc5ise6 ,circulare- - c(mpul de leg tur pentru indicarea celulei urm toare corespun# tor ultimei componente a listei indic adresa primei componente din list

1.1. Reprezentarea listelor (6)


I

'eclararea tipurilor de date C pentru definirea structurilor+


p

de liste dinamice simplu

typedef struct NOD { int inf; struct NOD* leg; } *PTNOD


p

de liste dinamice dublu (nl n&uite.

typedef struct NOD { int inf; struct NOD *ld, *ls; } *PTNOD;

1.2. Operaii primitive asupra listelor (1)


I I I I I

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.

1.2. Operaii primitive asupra listelor (2)


Par ur!erea $atelor memorate (ntr)o list% ,$e#i E*'R+&,&-. 1/0)
1.

: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 }

1.2. Operaii primitive asupra listelor (3)


2. Re!%sirea unei $ate (ntr)o ole ie memorat% (ntr)o list%
,;e#i E<E*C!3!8L1=4-

: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.

1.2. Operaii primitive asupra listelor (4)


3. &nserarea unei $ate (ntr)o list% I !ncluderea unei noi componente (ntr-o list poate fi reali#at +
la (nceputul listei p dup ultima component din list ) p (naintea/dup o component cu proprietatea c $aloarea c(mpului de informa&ie (ndepline.te o anumit condi&ie.
p

">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

1.2. Operaii primitive asupra listelor (5)


I I

&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.

(1ezi '*'R+&,&-. 1/1)

1.2. Operaii primitive asupra listelor (6)


&nserarea $up% ultima omponent% a unei liste
I

:unc&ia C inserare-la-sfarsit returnea# ,3EB9 pentru acasap 1 - dac .i numai dac este posibil o inserare)
p

0 - altfel.

1.2. Operaii primitive asupra listelor (2)


&nserarea unei in#ormaii $up% o elul% u in#ormaie unos ut% I !nserarea unui nou nod (ntr-o list identificat prin+ p $ariabila pri! p dup o celul p cu informa&ie cunoscut ) infod.
I I

.e/i 0102C3T345 ,-6 "7ig. de !ai 8os# .e/i 0102C3T345 ,-9 pentru inserarea inaintea unui nod dat

1.2. Operaii primitive asupra listelor (3)


4. 'liminarea unei $ate $intr)o list%. I Criteriile de eliminare+
p p p p

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 continuare) tipuri de elimin ri) cu .tergere fi#ic .

1.2. Operaii primitive asupra listelor (4)


'liminarea primei omponente a unei liste I :unc&ia C eli!ina-la-inceput returnea# + p 1 - dac lista nu este $id ) deci eliminarea primului nod este posibil ) p 0 - altfel.

;e#i E<E*C!3!8L 1=C

1.2. Operaii primitive asupra listelor (10)


'liminarea ultimei omponente a unei liste I Presupune determinarea acelei celule p cu proprietatea c p*+leg este 78LL. I :unc&ia C eli!ina-ulti! returnea# + p 1 - dac lista nu este $id ) este eliminat cu .tergere ultimul nod al listei. p 0 - dac lista este $id . ;e#i E<E*C!3!8L 1=D

1.2. Operaii primitive asupra listelor (11)


'liminarea primei elule a unei liste are are in#ormaia e!al% u o in#ormaie $at% I Solutie+
sunt calculate au; .i p) unde au; este nodul care precede celulei cu informa&ie dat (n lista din care este efectuat eliminarea p dac p este 78LL) atunci eliminarea este imposibil . p dac au; este 78LL) atunci eliminarea re$ine la e%tragerea cu .tergere a primului nod din list ) altfel este eliminat celula p) succesoare a lui au; (n list .
p

;e#i E<E*C!3!8L 1=E

1.2. Operaii primitive asupra listelor (12)


'liminarea no$ului are su e$e primei omponente al %rei (mp $e in#ormaie este unos ut I :unc&ia C eli!ina-dupa-infor!atie returnea# + p 1 - dac eliminarea este posibil ) p 0 2 altfel. 'aca informa&ia infodat a fost g sit (n c(mpul corespun# tor nodului nodul p ,p nu este 78LL- .i p are succesor (n list ) este reali#at eliminarea nodului p* +leg. Te!a pentru acasa 9lte e%emple+ Sortarea unei liste folosind metoda >ubble sort ,vezi '*'R+&,&-. 1/3Suma elementelor listei ,vezi '*'R+&,&-. 1/4)

1.3 .iste ir ulare simplu (nl%nuite (1)


I

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

1.3 .iste ir ulare simplu (nl%nuite (2)


"pera&ii de ba# (n lucrul cu liste circulare.
I

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. Sti$e .i co#i


I

stiv< .i coad< - tipuri de organi#are a aplic rii opera&iilor de inserare .i eliminare.

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

Coad - o list organi#at a.(.+


p p

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.

9ceste informa&ii pot fi men&inute e%plicit prin+

- 9daugarea unui nod intr-o coada ,:!:"- ,;e#i E<E*C!3!8L 1=10-

An continuare s(nt pre#entate opera&iile de inserare .i e%tragere a unei informa&ii dintr-o list liniar de tip coad .

1.4 .iste liniare $u7lu (nl%nuite (1)


Operatii urente I Creare) populare si parcurgere liste ,$e#i E<E*C!3!8l 3=0I !nserare nod la inceputul listei ,$e#i E<E*C!3!8L 3=1I !nserare nod inainte/dupa un nod cu $aloare data ,$e#i E<E*C!3!8L 3=2I Stergere nod la inceputul listei ,$e#i E<E*C!3!8L 3=3I Stergere nod la sfarsitul listei ,3EB9I Stergere nod pe ba#a unei conditii ,3EB9-

E%ercitii
I

Pentru e%ercitii desc5ideti fisierul GE%ercitii=liste6 si re#ol$ati pe ba#a indicatiilor e%ercitiile propuse.

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