Sunteți pe pagina 1din 18

CAPITOLUL 6

Implementari ale modelelor de date

Implementari ale modelelor de date

1.Tipuriabstractede date2.Colectii3.Liste4. Stive5. Cozi6. Arbori7.Mecanismulmosteniriiin


implementareacolectiilorde dateCAP. 6

CAP. 6

6.1. Tipuriabstractede date

Implementari ale modelelor de date

Datelesunt obiectele informaţionale de bază prelucrate într-o aplicaţie.

Dateleau un caracter dual: pe de o parte sunt piese de informaţie din domeniul problemei (au o
anumită semnificaţie), pe de altă parte –sunt structuri simbolice (au o formă de reprezentare internă şi
pot fi supuse unor anumite operaţii ⇒tipul de date).

CAP. 6

6.1. Tipuriabstractede date

Implementari ale modelelor de date

De cele mai multe ori, datele nu sunt independente; între ele există relaţii, de aceea datele sunt reunite
în structuri de date, diferenţiate prin modul de organizare a datelor. Orice limbaj de programare de nivel
înalt oferă:atât tipuri de date primitive, cât şi posibilitatea ca utilizatorul să îşi definească propriile
tipuri de date(de cele mai multe ori, structuri complexe de date).

CAP. 6

6.1. Tipuriabstractede date

Implementari ale modelelor de date

La nivel conceptual, structura de date este o schemă care conţine:componente(date primitive sau
structuri de date) şi relaţiile(care pot fi utilizate în elaborarea algoritmilor de rezolvare a problemei)
dintre ele. Pentru fiecare structură de date se specifică şi:operaţiilecare pot fi realizate asupra structurii
sau asupra componentelor acesteia.

8
CAP. 6

6.1. Tipuriabstractede date

Implementari ale modelelor de date

În rezolvarea unei probleme se poate alege una din următoarele trei abordări: Rezolvarea orientată pe
algoritm (pe acţiune), în care organizarea datelor este neesenţială; Rezolvarea orientată pe date,
acţiunile fiind determinate doar de organizarea datelor; Rezolvarea orientată obiect, care combină
tendinţele primelor două abordări.

CAP. 6

6.1. Tipuriabstractede date

Implementari ale modelelor de date

În limbajele de programare procedurală operaţiile sunt implementate separat de structura de date


(datele propriu-zise), prin funcţii (sau proceduri); legătura dintre structura de date şi operaţii se
realizează doar la nivel conceptual, nu prin mijloace specifice limbajului. Un tip abstract de date constă
într-o:structură de date şi o mulţime de operaţii care se pot realiza asupra acesteia.

10

CAP. 6

6.1. Tipuriabstractede date

Implementari ale modelelor de date

În limbajele de programare orientată obiect operaţiile sunt implementate prin metodele unei clase. O
clasă este un tip abstract de date, care cuprinde atât structura de date (datele şi legăturile dintre ele),
cât şi metodeleprin care se realizează operaţiile asupra structurii respective. Astfel, se unifică datele şi
modalităţile de prelucrare a acestora.

11

CAP. 6

6.1. Tipuriabstractede date

Implementari ale modelelor de date

Tabloulreprezintă o structură de date omogenă (grupează elemente de acelaşi tip), cu următoarele


caracteristici: Elementele tabloului ocupă o zonă continuă de memorie;
Componenteletablouluisuntindexate; După numărul de inidici, componentele tabloului pot fi plasate
pe una, două sau mai multe direcţii în spaţiu (tablouri unidimensionale, bidimensioanale sau n-
dimensionale); Dimensiuniletabloului(exprimateprinnumărulde componentepefiecaredirecţie) suntfixe,
nu se pot modificaîntimpulexecuţieiprogramului. Referirea unui element a tabloului se face prin
numele tabloului şi indicele (indicii) care arată poziţia elementului în cadrul tabloului. Astfel, este posibil
accesul direct la orice element al tabloului, fără a fi necesară parcurgerea celorlalte elemente.

12

CAP. 6

6.1. Tipuriabstractede date

Implementari ale modelelor de date

Prin intermediul structurilor, programatorul areposibilitatea să îşi definească propriile tipuri de date,
numite şi înregistrări. Înregistrarea reprezintă o structură de date neomogenă, cu următoarele
caracteristici: oComponentele înregistrării sunt numite câmpuri, având fiecare propriul nume;
oCâmpurile pot fi de tipuri diferite (de aceea înregistrarea este o structură de date neomogenă) şi pot
conţine nu numai date primitive, ci şi structuri de date (orice câmp al unei înregistrări poate fi el însuşi o
înregistrare). oAccesul la un element al unei înregistrări se realizează cu ajutorul operatorului binar de
selecţie (<nume_variabila_de_tip_înregistrare>

<nume_câmp>)

13

CAP. 6

6.1. Tipuriabstractede date

Implementari ale modelelor de date

Observaţii:

1. În memorie, câmpurile sunt aşezate consecutiv, ocupând o zona contiguă. 2. În cazul în care se
doreşte ca aceeaşi zonă de memorie să fie utilizată în comun de către toate câmpurile, limbajul C oferă
programatorului uniunile. 3. Alocarea memoriei pentru o componentă a structurii se poate realiza la
nivel de număr de biţi, prin intermediul câmpurilor de biţi. 4. În limbajul C++, structura de înregistrare a
fost extinsă, astfel încât, în afară de datele propriu-zise să conţină şi funcţiile (funcţiile membre,
metodele) care implementează operaţiile prin care se prelucrează acestea. S-a obţinut astfel conceptul
de clasă. 5. În C++ şi structurile pot avea ca membri metode. Structura este un caz particular de clasă, cu
membrii implicit publici. 6. Alocareamemorieipentrustructurilede date tablouşiînregistrarese poateface
atâtstatic, câtşidinamic.

14

CAP. 6

6.1. Tipuriabstractede date

Implementari ale modelelor de date


Fiecare programator îşi poate defini propriile implementări ale modelelor de date, sau poate să
folosească unele tipuri definite în bibliotecile sistemului, pe care le modifică corespunzător cerinţelor
aplicaţiei.În ambele situaţii însă, este necesară cunoaşterea modului de organizare internă a unor astfel
de modele de date, precum şi posibilităţile de reprezentare şi de exploatare ale acestora prin
intermediul claselor de colecţii, al claselor container şi al claselor template.

Implementari ale modelelor de date

15

1.Tipuriabstractede date2.Colectii3.Liste4. Stive5. Cozi6. Arbori7.Mecanismulmosteniriiin


implementareacolectiilorde dateCAP. 6

16

CAP. 6

6.2. Colectii

Implementari ale modelelor de date

În cazul structurilor de date tablou şi înregistrare, numărul de elemente este fixat în momentul în care
erau create structurile respective. Pentru eliminarea acestui dezavantaj, a fost introdus conceptul de
colecţiede date. Colecţiaeste o acumulare finită de obiecte, numite elemente (noduri, celule).
Elementele colecţiei pot fi:de acelaşi tip (colecţii omogene: listă de persoane, listă de numere întregi)
sau de tipuri diferite (colecţii heterogene: listă liniară de primitive grafice-linie, cerc, dreptunghi).

17

CAP. 6

6.2. Colectii

Implementari ale modelelor de date

În general, elementele unei colecţii sunt diferite, dar se permite şi existenţa unor elemente identice.
Numărul de elemente se poate modificaîn timpul utilizării colecţiei, deci a execuţiei programului, fie prin
adăugareade noi elemente, fie prin eliminareaunor elemente existente. Ordinea elementelor dintr-o
colecţie nu este esenţială, dar trebuie să existe o modalitate de a parcurge toate elementele colecţiei
pentru a căuta un anumit element.

18

CAP. 6

6.2. Colectii

Implementari ale modelelor de date

Deoarecenumãrulde elementeale colectieiestevariabil(oricândpot fi realizateoperatiide


adãugaresaustergerea elementelorcolectiei), colectiilesuntnumitestructuridinamicede date.O colecţie
poate fi:ordonată(în acest caz, pentru tipul elementelor colecţiei s-a definit o relaţie de ordine prin
supraîncărcarea unui operator relaţional) sauneordonată.

19

CAP. 6

6.2. Colectii

Implementari ale modelelor de date

Câteva dintre operaţiile de bază care pot fi realizate asupra colecţiilor sunt: creareacolecţiei;
adăugareaunui element; ştergereaunui element al colecţiei; căutareaunui element al colecţiei în
funcţie de un anumit criteriu;testareacolecţiei vide; testareaaparteneţei unui element la colecţie;
distrugereacolecţiei. Colecţiile pot fi îmbogăţite comportamental prin operaţii de căutare, ordonare,
interclasare, traversare, etc.

20

CAP. 6

6.2. Colectii

Implementari ale modelelor de date

Pentru a face posibilă traversarea colecţiei (parcurgerea tuturor elementelor colecţiei unul după altul), s-
a introdus conceptul abstract de iterator. Iteratorul este un obiect care indică unul din elementele
colecţiei şi permite să se efectueze anumite operaţii asupra colecţiei, în locul în care se găseşte
elementul indicat. Denumirea de iteratorprovine tocmai de la faptul că acesta permite trecerea de la un
element la altul al colecţiei, deci aplicarea unor algoritmi iterativi pe colecţia respectivă.

21

CAP. 6

6.2. Colectii

Implementari ale modelelor de date

StructuridinamicededateStructuriledinamicededatesuntstructuridedatealecărordimensiuniseschimbăpe
parcursulexecuţieiprogramului.Colecţiilesuntastfeldestructuridinamice.Elementeleuneistructuridinamice
dedatesuntînlănţuite,fiecareelement(numitşinod)cuprinzând,pelângăinformaţiapropriu-
zisă,oinformaţiedelegăturăprincareserealizeazăînlănţuirea.

22

CAP. 6

6.2. Colectii

Implementari ale modelelor de date


O structură dinamică poate avea elementele structurate astfel: Pe un singur nivel, caz în care structura
se numeşte listă liniară; Pe mai multe niveluri, caz în care structura se numeşte arbore; Poate
cuprinde elemente care nu pot fi structurate pe niveluri, putând exista legături între oricare două
noduri, caz în care structura se numeşte graf .

Implementari ale modelelor de date

23

1.Tipuriabstractede date2.Colectii3.Liste4. Stive5. Cozi6. Arbori7.Mecanismulmosteniriiin


implementareacolectiilorde dateCAP. 6

24

CAP. 6

6.3. Liste

Implementari ale modelelor de date

Lista(lista liniară) este o colecţie, ale cărei elemente pot fi parcurse secvenţial, într-o ordine determinată.
Exista, deci, un prim element, unultim elementşi omodalitate de trecere de la un element al listei la cel
următor.

25

CAP. 6

6.3. Liste

Implementari ale modelelor de date

La nivel conceptual, se poate considera că elementele unei liste sunt situate pe o singură linie, la fel cu
cele ale unui tablou unidimensional; ordinea naturală de parcurgere este cea în care elementele sunt
situate în listă. Deosebireafaţă de tablou constă în aceea că, numărul de elemente ale tabloului se
fixează la crearea acestuia şi nu mai poate fi modificat ulterior, pe când numărul de elemente dintr-o
listă se poate modifica prin adăugari şi eliminări în timpul execuţiei. Tocmai din aceasta cauză spunem că
lista este o colecţie, şi nu untablou.

26

CAP. 6

6.3. Liste

Implementari ale modelelor de date

În funcţie de numărul şi tipul de legături dintre elementele listei, listele se clasifică în: Liste

simplu înlănţuite

(cu o singură legătură, cea către elementul următor); Liste

dublu înlănţuite
(cu două legături: una către elementul anterior şi una către elementul următor); Liste

circulare

(obţinute prin “legarea” primului şi a ultimului element din listă).

27

CAP. 6

6.3. Liste

Implementari ale modelelor de date

Din punct de vedere al locului în care se realizează operaţiile de adăugare şi eliminare, listele se clasifică
în:Stive–adăugarea şi eliminarea se realizează într-un singur capăt al listei; Cozisimple(adăugarea se
realizează la un capăt al listei, iar eliminarea la celălalt capăt al listei) sau duble(adăugarea şi eliminarea
se realizează la ambele capete ale listei);

28

CAP. 6

6.3. Liste

Implementari ale modelelor de date

6.3.1. LISTE SIMPLU ÎNLĂNŢUITE Spaţiul de memorie pentru o structură de date de tip listă poate fi
alocat:secvenţial(printr-un tablou) sau înlănţuit. În cazul implementării statice a listelor (prin tablou),
nuputem privi această structură de date ca pe o colecţie. O astfel de structură de date este definită
prin:poziţia elementului curent, poziţia ultimului element şi un tablou de pointeri către itemi
(informaţia propriu-zisă). Elementele vecine din listă ocupă poziţii succesive în memorie.

29

CAP. 6

6.3. Liste

Implementari ale modelelor de date

6.3.1. LISTE SIMPLU ÎNLĂNŢUITE Avantajul unei astfel de implementări constă în accesuldirectla oricare
dintre nodurile listei (analog accesului la componentele unui vector). Dezavantajeleprincipale sunt
imposibilitatea de a modifica în timpul execuţiei numărul maxim de elemente ale tabloului şi în efortul
mare cu care se realizează operaţiile de adăugare, eliminareşi schimbaredepoziţiea unui nod.

30

CAP. 6

6.3. Liste

Implementari ale modelelor de date


6.3.2. LISTE DUBLU ÎNLĂNŢUITE
Listeledubluînlănţuitesuntlisteleîncarefiecarenodconţinedouăinformaţiidelegătură:legăturacătreeleme
ntulurmătorşilegăturacătreelementulprecedent.

31

CAP. 6

6.3. Liste

Implementari ale modelelor de date

6.3.2. LISTE DUBLU ÎNLĂNŢUITE

Deoarecefiecarenodeste“legat”atâtdenodulurmător,câtşidecelprecedent(cuexcepţiaprimuluişiaultimului
nod),listelecircularepotfiparcurseînambelesensuri.Dacăînlistelesimpluînlănţuiteundezavantajîlreprezent
afaptulcăaccesullaultimulnodserealizaparcurgândsecvenţialtoatenodurileanterioare,listeledubluînlănţuit
eeliminăacestinconvenient.

32

CAP. 6

6.3. Liste

Implementari ale modelelor de date

6.3.3. LISTE CIRCULAREListele circulare reprezintă cazuri particulare ale listelor simplu sau dublu
înlănţuite, în care primul şi ultimul element din listă sunt legate între ele.În listele circulare, toate
elementele pot fi “privite” în acelaşi mod: în listele simplu înlănţuite circulare, fiecare nod are o
legătură către nodul următor(inclusiv ultimul); în listele dublu înlănţuite circulare fiecare nod are o
legătură către nodul următor(inclusiv ultimul) şi o legătură către nodul precedent(inclusiv primul).

33

CAP. 6

6.3. Liste

Implementari ale modelelor de date

6.3.3. LISTE CIRCULARE

Implementari ale modelelor de date

34

1.Tipuriabstractede date2.Colectii3.Liste4. Stive5. Cozi6. Arbori7.Mecanismulmosteniriiin


implementareacolectiilorde dateCAP. 6

35

CAP. 6
6.4. Stive

Implementari ale modelelor de date

Stivelereprezintă cazuri particulare ale listelor simplu înlănţuite, în care operaţiile de adăugare sau
eliminare a unui element se realizează printr-un singur capăt, vârful stivei. Stiva funcţionează pe
principiul LIFO(Last In First Out), “ultimul intrat primul ieşit”.

36

CAP. 6

6.4. Stive

Implementari ale modelelor de date

În literatură, operaţia de adăugare în stivă este numită push, iar operaţia de eliminare –pop. Stivele sunt
colecţii de date pentru care la un moment dat este “vizibil” un singur element (vârful stivei).

Intuitiv, un mod de lucru analog cu cel din cazul stivei poate fi întâlnit la un teanc de farfurii (“stivă de
farfurii”). Adăugarea şi scoaterea unei farfurii se realizează, cu uşurinţă, numai în vârful stivei

Implementari ale modelelor de date

37

1.Tipuriabstractede date2.Colectii3.Liste4. Stive5. Cozi6. Arbori7.Mecanismulmosteniriiin


implementareacolectiilorde dateCAP. 6

38

CAP. 6

6.5. Cozi

Implementari ale modelelor de date

6.5.1. COZI FIFOÎn colecţia de date de tip coadă(tot caz particular al unei liste simplu înlănţuite)
operaţiile de inserare se realizează la unul din capete, iar operaţiile de eliminare (consultare, modificare)
–la celălalt capăt. Coada funcţionează pe principiul FIFO(First In First Out), “primul intrat primul ieşit”.

39

CAP. 6

6.5. Cozi

Implementari ale modelelor de date

6.5.1. COZI FIFOÎn colecţia de date de tip coadă(tot caz particular al unei liste simplu înlănţuite)
operaţiile de inserare se realizează la unul din capete, iar operaţiile de eliminare (consultare, modificare)
–la celălalt capăt. Coada funcţionează pe principiul FIFO(First In First Out), “primul intrat primul ieşit”.
Alocarea secvenţială a cozii (implementarea acesteia ca tablou) este total nerecomandabilă. Coada
poate fi implementată atât ca o listă simplu înlănţuită, cât şi ca o listă dublu înlănţuită, cu operaţiile
specifice.

40

CAP. 6

6.5. Cozi

Implementari ale modelelor de date

6.5.2. COZI DE PRIORITĂŢICoada de priorităţi (engl. “priority queue”) este o coadăîn care fiecare element
are asociat un număr întreg, numit prioritate. Principalele operaţii sunt adăugareaşi extragereaunui
element. La extragereaunui element din coadă se alege elementul cu cea mai înaltă prioritate.

41

CAP. 6

6.5. Cozi

Implementari ale modelelor de date

6.5.2. COZI DE PRIORITĂŢICoada de priorităţi poate fi realizată în două moduri: ca listă ordonată
descrescător după priorităţi, sau ca arbore de selecţie. Dacă este realizată ca listă ordonată, la
adăugarea unui element este necesar să se parcurgă toate elementele situate înaintea lui (elementele
cu prioritate mai mare).

Implementari ale modelelor de date

42

1.Tipuriabstractede date2.Colectii3.Liste4. Stive5. Cozi6. Arbori7.Mecanismulmosteniriiin


implementareacolectiilorde dateCAP. 6

43

CAP. 6

6.6. Arbori

Implementari ale modelelor de date

Arboriireprezintă colecţii structurate pe mai multe niveluri. În aceste structuri de date ierarhizate,
fiecare nod are un singur nod părinteşi poate avea mai multe noduri fii.Există un singur nod care nu are
părinte, numit rădăcină.Nodurile care nu au fii se numesc frunze.

44

CAP. 6

6.6. Arbori

Implementari ale modelelor de date


6.6.1. ARBORI GENERALIUn arbore oarecare (general) are mai mulţi fii. Definiţia 6.1.: Fie H=(V, E) un
digraf (graf orientat). Se numeşte

rădăcină a lui G un vârf vV, astfel încât oricare ar fi un vârf vi0∈∈V, există cel puţin un drum de la v0 la vi.
Dacă H=(V, E) este un digraf, prin graful suport al lui H se înţelege graful obţinut din H, prin renunţarea la
orientarea arcelor. H se numeşte arborescenţă dacă are o rădăcină, iar graful său suport este arbore.

45

CAP. 6

6.6. Arbori

Implementari ale modelelor de date

6.6.1. ARBORI GENERALIObservaţie: În informatică, arborescenţele sunt numite, de obicei,

arbori, specificându-se rădăcina şi considerând implicită orientarea muchiilor (corespunzător parcurgerii


drumului unic de la rădăcină către vârf).

46

CAP. 6

6.6. Arbori

Implementari ale modelelor de date

6.6.1. ARBORI GENERALI

Nodul A este rădăcina arborelui. Nodurile B, C, D şi E sunt fiii nodului A, iar nodul A este părintele (tatăl)
nodurilor B, C, D şi E. În mod analog, nodurile F şi G sunt fiii nodului B, iar B este părintele nodurilor F şi
G. Numărul fiilor unui nod părinte constituie ordinul nodului respectiv. NodurileF, G, C, H, I, J şiK
suntfrunzelearboreluisaunoduriterminale(nu le maicorespundsubarbori, nu au descendenţi). Nodurile A
şi D sunt ascendenţii nodurilor H, I şi J, iar nodurile H şi J sunt descendenţii nodurilor A şi D. Spunem că
nodul H este descendentul nodului A dacă există o cale descendentă (de la părinte la fiu), de la A către
H.

47

CAP. 6

6.6. Arbori

Implementari ale modelelor de date

6.6.1. ARBORI GENERALIDupa pozitia lor în arbore, nodurile sunt situate pe mai multe niveluri. Se
consideră că radacina arborelui are nivelul 0. Nivelul unui nod arată numărul de legături descendente
parcurse de la rădăcina arborelui până la nodul respectiv. De exemplu, nodul H din figura este situat pe
nivelul 2.

48

CAP. 6

6.6. Arbori

Implementari ale modelelor de date

6.6.2. ARBORI BINARIDefiniţia6.3.: Un arbore binarestearbore încare fiecarenod are celmultdoifii

Definiţia6.4.: (conf. D.E. Knuth) Se

numeştearbore binarun set finitT de unulsaumaimultenoduri, astfelîncât: 1. Există un nod cu destinaţie


specială, numit tulpina arborelui; 2. Celelalte noduri sunt repartizate în 2 seturi disjuncte, unde fiecare
dintre aceste seturi este, la rândul său, un arbore

49

CAP. 6

6.6. Arbori

Implementari ale modelelor de date

6.6.2. ARBORI BINARIDefiniţia 6.5.: Arborele binar complet este un arbore binar în care toate

nivelurile sunt complete (toate nodurile intermediare au exact doi fii şi toate frunzele sunt situate pe
acelaşi nivel, ca în figura unde toate frunzele se află pe nivelul 3).

50

CAP. 6

6.6. Arbori

Implementari ale modelelor de date

6.6.2. ARBORI BINARI

Definiţia 6.5.: Arborele binar

aproape complet este un arbore binar în care toate nivelurile sunt complete, cu exceptia ultimului nivel,
care este aproape complet. Toate nodurile lipsă de pe ultimul nivel sunt situate la sfârşitul acestuia

51

CAP. 6

6.6. Arbori

Implementari ale modelelor de date


6.6.2. ARBORI BINARIArboriibinarisuntextremde importanţi, deoareceun studiularboriloroarecarepoatefi
redusla un studiularborilorbinari. Un arbore binar poate fi percurs în trei moduri:În inordine(fiul stâng,
rădăcina, fiul drept): H D I B J E A F C GÎn postordine(fiul stâng, fiul drept, rădăcina): H I D J E B F G C
AÎn preordine(rădăcina, fiul stâng, fiul drept): A B D H I E J C F G

52

CAP. 6

6.6. Arbori

Implementari ale modelelor de date

6.6.3. ARBORI DE CAUTARE-SORTAREFie un arbore binar, care are proprietatea că informaţiile din noduri
pot fi comparate (ordonate) după un anumit criteriu. Vom spune că nodul A precede nodul B dacă, după
criteriul adoptat, informaţia din A o precede pe cea din B. Definiţia 6.6.: Se numeşte arbore de căutare
un arbore binar cu

următoarele proprietăţi: Toate nodurile din subarborele stâng sunt “mai mici” decât rădăcina (preced
rădăcina); Toate nodurile din subarborele drept sunt “mai mari” decât rădăcina (succed rădăcina);
Orice subarbore al arborelui de căutare este el însuşi un arbore de căutare (structură recursivă).

53

CAP. 6

6.6. Arbori

Implementari ale modelelor de date

6.6.3. ARBORI DE CAUTARE-SORTAREUn exemplu de arbore de căutare este dat în figura , unde
informaţiile din noduri sunt numere întregi, iar criteriul de ordonare este cel al ordinii naturale a
numerelor.

54

CAP. 6

6.6. Arbori

Implementari ale modelelor de date

6.6.3. ARBORI DE CAUTARE-SORTARECăutareaunuielementîntr-un astfelde arbore, este uşorde realizat:


Dacă valoarea căutată coincide cu cea din rădăcina, căutarea se încheie cu succes; Dacănu, se
“pleacă” pe una dincele douădirecţii: Dacă valoarea căutată este mai mică decât cea din rădăcină, se
caută în subarborele stâng; Dacă valoarea căutată este mai mare decât cea din rădăcină, se caută în
subarborele drept; Căutarea se încheie cu succes în momentul în care s-a gasit valoarea căutată, sau
eşuează când se ajunge la un nod terminal (nodul curent nu mai are subarbore în partea în care ar trebui
continuată căutarea).

55
CAP. 6

6.6. Arbori

Implementari ale modelelor de date

6.6.3. ARBORI DE CAUTARE-SORTARECăutarea elementului minim şi maxim se realizează cu multă


uşurinţă. Pentru a găsi nodul care conţine informaţia minimă se porneşte de la rădăcină şi se urmează
numai calea spre fiul stâng, până când se ajunge la un nod care nu mai are fiu stâng. Analog, pentru
nodul de valoare maximă, se porneşte de la rădăcină, se urmează calea spre fiul dreapta, până se ajunge
la un nod care nu mai are fiu dreapta.

56

CAP. 6

6.6. Arbori

Implementari ale modelelor de date

6.6.3. ARBORI DE CAUTARE-SORTAREInserarea unui nod în arborele de căutare se face astfel: Se caută
locul în care ar trebui să se găsească nodul respectiv (analog căutării unei valori existente); Dacă există
deja un nod care conţine valoarea respectiva, operaţia se încheie fără a se adăuga un nou nod; Dacă nu
se găseşte în arbore un astfel de nod, se adaugă noul nod ca fiu (stânga sau dreapta) al nodului la care s-
a încheiat operaţia de căutare.

57

CAP. 6

6.6. Arbori

Implementari ale modelelor de date

6.6.3. ARBORI DE CAUTARE-SORTAREEliminarea unui nod dintr-un arbore de căutare este cea mai
complicată operaţie:Dacă nodul care trebuie şters este frunză a arborelui de căutare, operaţia este
simplă: se caută nodul respectiv şi se elimină legătura către acesta din nodul-tată.Dacă se doreşte
eliminarea unui nod care este rădăcină a arborelui sau a unui subarbore: se elimină numai informaţia
din nod şi se înlocuieşte cu cea din fiul minim al subarborelui din dreapta sau cu cea din fiul maxim al
subarborelui din stânga. Dacă acest nod, din care s-a extras informaţia, este o frunză, nodul se elimină.
Dacă însă este tot un nod intermediar (rădăcină a unui subarbore), se repetă operaţia descrisă, până se
ajunge la o frunză.

Implementari ale modelelor de date

58

1.Tipuriabstractede date2.Colectii3.Liste4. Stive5. Cozi6. Arbori7.Mecanismulmosteniriiin


implementareacolectiilorde dateCAP. 6

59
CAP. 6

6.7. Mecanismulmosteniriiin implementareacolectiilorde date

Implementari ale modelelor de date

Aşa cum s-a evidenţiat în paragrafele anterioare şi în exemplele prezentate, o colecţie de date se
caracterizează prin modelul de date pe care îl reprezintă (listă, vector, etc.) şi prin tipul obiectelor
conţinute (predefinit sau definit de utilizator).În ceea ce priveşte tipul obiectelor colecţiei,
implementările prezentate au fost destul de generale, în sensul că în clasele de colecţii s-au utilizat
pointeri generici (astfel încât să nu fie necesare modificări atunci când elementele listei sunt fie în
anumite cazuri întregi, în altele şiruri de caractere, etc.).

60

CAP. 6

6.7. Mecanismulmosteniriiin implementareacolectiilorde date

Implementari ale modelelor de date

Folosind moştenirea se pot defini colecţii de date de diferite tipuri, cu mult mai multă flexibilitate şi
concizie. Există mai multe posibilităţi, trei dintre acestea fiind prezentate în continuare: Se defineştre
forma colecţiei printr-o clasă de bază, iar colecţia de obiecte de un tip oarecare (predefinit sau definit de
utilizator) se reprezintă printr-o clasă derivată din aceasta. Implementareacolecţiilorde date princlase
derivate

61

CAP. 6

6.7. Mecanismulmosteniriiin implementareacolectiilorde date

Implementari ale modelelor de date

Această modalitate de implementare a colecţiilor se poate folosi pentru orice tip de date (predefinit sau
definit de utilizator). Deficienţaacestei metode este aceea că nu se poate defini o interfaţă unică în clasa
de bază pentru funcţiile care necesită accesul la informaţia propriu-zisă din nod (funcţiile de căutare a
unui anumit element sau funcţiile de inserare a unui element care să menţină elementele unei liste,
vector sau arbore. Pentru astfel de situaţii se pot folosi colecţiile care au o clasă de bază unică, colecţiile
care folosesc clase abstracte, sau colecţii reprezentate prin clase template.

62

CAP. 6

6.7. Mecanismulmosteniriiin implementareacolectiilorde date

Implementari ale modelelor de date

Implementarea colecţiilor de date folosind o clasă de bază unică O altă modalitate de a implementa
colecţii “sigure ca tip” (type-safe) pentru diferite tipuri de date definite de utilizator este de a defini o
clasă de bază unică, din care se derivează toate clasele (tipurile de date) ale colecţiilor. Forma colecţiei
(listă, vector, etc.) se defineşte pentru clasa de bază; pentru o colecţie de aceeaşi formă pentru un tip
specific de date, se poate folosi direct colecţia pentru clasa de bază sau se poate deriva o clasă de
colecţie proprie, prin redefinirea unui număr redus de funcţii.

63

CAP. 6

6.7. Mecanismulmosteniriiin implementareacolectiilorde date

Implementari ale modelelor de date

Implementareacolecţiilorde date princlasecontainer Implementările colecţiilor de date prezentate până


acum, folosesc clase concrete, în sensul că toate operaţiile acestora sunt definite şi ele pot fi folosite
pentru instanţieri. Clasele concrete (tipurile concrete –concrete data types) permit definirea fiecărui
concept care nu are suport predefinit în limbaj, dar nu exprimă părţile comune ale mai multor
implementări ale unui anumit concept (model de date). De exemplu, o mulţime poate fi implementată
printr-o listă sau printr-un vector, dar clasele concrete care reprezintă aceste structuri nu pot exprima
conceptul de “mulţime” comun celor două modalităţi de implementare.

64

CAP. 6

6.7. Mecanismulmosteniriiin implementareacolectiilorde date

Implementari ale modelelor de date

O metodă de a exprima partea comună a diferitelor abordări ale unui concept este de a introduce o
clasă de bază abstractă care reprezintă interfaţa comună mai multor implementări diferite ale acelui
concept. O astfel de clasă abstractă folosită pentru definirea colecţiilor de date se numeşte clasă
container.

PROGRAMAREACALCULATOARELORŞILIMBAJEDE PROGRAMAREII

65

CAP. 6

6.7. Mecanismulmosteniriiin implementareacolectiilorde date

Implementari ale modelelor de date

Aşadar, o altă modalitate de implementare a colecţiilor de date este oferită de clasele container. Clasele
container sunt clase abstracte, care asigură definirea unui concept într-un mod ce permite coexistenţa
într-un program a mai multor implementări ale acestuia.Clasele abstracte se pot utiliza în acelaşi mod
pentru definirea oricărui concept, nu numai pentru concepte privitoare la colecţiile de date, aşa cum a
fost prezentat în acest paragraf.
66

CAP. 6

6.7. Mecanismulmosteniriiin implementareacolectiilorde date

Implementari ale modelelor de date

Modalităţile de implementare–începând cu cele mai “simple”, dar mai puţin eficiente, până la ultimele –
urmăresc, de fapt, obţinerea unui grad mare de genericitate, prin implementarea unor algoritmi pentru
cazuri cât mai generale şi reutilizarea codului existent. Practic, prin colecţiile generice se implementează
mecanismul specific colecţiei indiferent de tipul obiectelor memorate. Reutilizarea codului este realizată
prin specializarea tipurilor generice.

67

CAP. 6

6.7. Mecanismulmosteniriiin implementareacolectiilorde date

Implementari ale modelelor de date

În limbajul C genericitatea era obţinută prin pointeri de tip void *, care puteau memora referinţe către
orice tipuri. Dezavantajeleprincipale constau în gestiunea dinamică a memoriei, în faptul că acea colecţie
nu era responsabilă de gestiunea obiectelor memorate şi nici de distrugerea corectă a obiectelor din
colecţie.

68

CAP. 6

6.7. Mecanismulmosteniriiin implementareacolectiilorde date

Implementari ale modelelor de date

În limbajul C++, implementarea colecţiilor folosind o clasă de bază unică (Object) asigură
heterogenitatea (colecţia poate memora şi agrega indirect obiecte dintr-un super-tip, Object),
destructorul virtual al clasei Object rezolvă problema responsabilităţii la distrugere, oferind posibilitatea
implementării unor tipuri de date “sigure”. O altă posibilitate este aceea de a implementa colecţiile prin
clasele container, clase abstracte care oferă o interfaţă comună mai multor implementări pentru
acealaşi tip.

69

SFARSITUL Capitolului6

CAP. 6Implementari ale modelelor de date

1.Conceptede bazaale programariiorientate


peobiecte2.Clasesiobiecte3.Supraincarcareaoperatorilor4.Creareaierarhiilorde clase5.Operatiide intrare/
iesirein limbajulC++6.Implementariale modelelorde
date7.Functiisiclasegenerice8.ExceptiisitratareaacestoraCuprinsulCursului
2

Programareacalculatoarelorşilimbajede programareII

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