Documente Academic
Documente Profesional
Documente Cultură
Complexitate
Ludmila NOVAC
Dr., conf. univ.
Dep. Informatică
Unităţi de conţinut
Structuri dinamice de date
1. Structuri dinamice de date (arbori binari, liste, stive, cozi).
Arbori binari. Crearea arborilor. Accesul la elementele unui arbore.
Parcurgerea arborilor binari. Arbori binari plini. Arbori binari de căutare.
Exemplu de clasă generică de reprezentare a arborilor binari de căutare.
2. Liste simplu înlănţuite. Liste înlănţuite ciclic. Liste dublu înlănţuite.
Liste dublu înlănţuite ciclic. Exemple de clase generice de reprezentare
a listelor.
3. Stive. Stive reprezentate prin buffer de lungime fixă. Stive
reprezentate prin liste simplu înlănţuite. Exemple de clase generice de
reprezentare a stivelor. Realizarea algoritmului de sortare rapidă prin
utilizarea stivei.
4. Cozi. Cozi reprezentate prin buffer ciclic. Cozi reprezentate prin liste
simplu înlănţuite. Exemple de clase generice de reprezentare a cozilor.
Planul Lecţiei
• Stive. Stivele reprezentate prin buffer de lungime fixă.
Stive reprezentate prin liste simplu înlănţuite. Realizarea
algoritmului de sortare rapidă prin utilizarea stivei.
Stivă
Coadă
Stivele. Implementarea stivelor
Stivele
• Pentru implementarea unei stive folosind masive (tablouri) avem nevoie de
un tablou (masiv) V de dimensiune n pentru memorarea elementelor.
Ultimul element al tabloului va fi utilizat pentru memorarea numărului de
elemente ale stivei.
În cazul în care stiva este vidă, atunci elementul Vn-1 va avea valoarea 0. Folosind
această reprezentare, operaţiile de bază se pot implementa în timp constant (O(1)).
Stive. Noţiuni generale
• Stivă (engl. stack, LIFO list, pushdown stack, pushdown list)
este o structură dinamică de date compusă dintr-un set
ordonat şi finit de elemente de una şi aceiaşi structură, astfel
ca adăugarea elementelor noi şi accesarea (mai ales
extragerea) elementelor existente se efectuează dintr-un
capăt (numit vârful stivei) după principiul “ultimul a întrat –
primul a ieşit” (engl. LIFO – Last In, First Out ).
Moduri de implementare
Stivele şi cozile pot fi implementate în mai multe moduri. Cele mai
utilizate implementări sunt cele folosind masive şi liste. Ambele
abordări au avantaje şi dezavantaje:
La stive se aplică operaţiile următoare:
• La stive se aplică următoare operaţii :
După trei înscrieri consecutive (push(A), push(B), push(C)) stiva va arăta astfel:
Dacă mai departe va urma o extragere (pop), ea va avea rezultatul C, iar stiva va
arăta astfel:
Utilizarea stivelor la parcurgerea
arborilor binari
• În continuare vom demonstra utilizarea stivelor pentru parcurgerea arborilor
binari. În capitolul consacrat arborilor binari au fost prezentate parcurgerile
(preordine, inordine, postordine) şi realizarea prin funcţii recursive.
Acum vom folosi stivele.
Parcurgerea arborilor binari. Exemplu
a) Traversarea în preordine (RSD)
- se vizitează rădăcina
- traversează subarborele stâng
- traversează subarborele drept
b) Traversarea în inordine (SRD)
- se traversează subarborele stâng
- se vizitează rădăcina
- se traversează subarborele drept
c) Traversarea în postordine (SDR)
- se traversează subarborele stâng
- se traversează subarborele drept
- se vizitează rădăcina
Exemplu:
Vom exemplifica metodele de parcurgere
pe următorul arbore.
Pentru arborele binar din figură avem
următoarele succesiuni ale
parcurgerilor:
• metoda RSD: 1, 2, 4, 5, 6, 7, 8, 9, 3
• metoda SRD: 4, 2, 6, 5, 8, 7, 9, 1, 3
• metoda SDR: 4, 6, 8, 9, 7, 5, 2, 3, 1
Parcurgerea arborilor binari
Un arbore binar este un arbore în care fiecare nod are gradul cel mult 2 adică
fiecare nod are cel mult 2 fii.
Parcurgeri în adâncime Pentru arborele din figură şirul parcurgerii pe niveluri este: