STRUCTURA DE TIP STIVA DEFINITIE SI IMPLEMENTARE CONTINUT

  • Slides: 10
Download presentation
STRUCTURA DE TIP STIVA DEFINITIE SI IMPLEMENTARE

STRUCTURA DE TIP STIVA DEFINITIE SI IMPLEMENTARE

CONTINUT • DEFINITIE • DECLARAREA STIVEI • PRELUCRAREA STIVEI - Testare - Initializare -

CONTINUT • DEFINITIE • DECLARAREA STIVEI • PRELUCRAREA STIVEI - Testare - Initializare - Adaugarea unui nod - Eliminarea unui nod

DEFINITIE • Def: Stiva este o lista restrictiva in care operatiile de introducere si

DEFINITIE • Def: Stiva este o lista restrictiva in care operatiile de introducere si extragere se efectueaza pe la o singura extremitate. • Proprietati: -Extremitatile stivei se numesc baza si varf. - accesul la nodurile stivei este permis numai prin extremitatea varf. - stiva se mai numeste si structura de tip LIFO (Last In First Out) vf 10 8 12 baza

IMPLEMENTARE Implementarea stivei se poate face: • cu alocare inlantuita. – la fel ca

IMPLEMENTARE Implementarea stivei se poate face: • cu alocare inlantuita. – la fel ca a unei liste liniare dar se vor folosi numai adaugarea in fata primului nod si eliminarea primului nod. • cu alocare secventiala – este un mecanism mult mai simplu pentru adaugarea si eliminarea nodurilor. Concluzie: cea mai simpla implementare a stivelor este cea secventiala cu ajutorul unui vector.

DECLARAREA STIVEI Sintaxa: const unsigned NMAX=100; typedef <tip_data> nod; unde: tip_data = orice tip

DECLARAREA STIVEI Sintaxa: const unsigned NMAX=100; typedef <tip_data> nod; unde: tip_data = orice tip al limbajului val = valoarea introdusa in nod vf = varful stivei nod stiva [NMAX+1], val; unsigned vf, baza; Prelucrarea se face de la varf spre baza. Accesul la informatia din varful stivei se face cu stiva [vf]

PRELUCRAREA STIVEI 1. Testarea stivei a. stiva vida: int este_vida (unsigned vf) {return vf

PRELUCRAREA STIVEI 1. Testarea stivei a. stiva vida: int este_vida (unsigned vf) {return vf == NULL; } unde este_vida e o functie cu valoarea 1 daca stiva e vida si 0 in caz contrar. b. stiva plina: int este_plina (unsigned vf) {return vf == NMAX; } unde este_plina e o functie cu valoarea 1 daca stiva e plina si 0 in caz contrar. 2. Initializarea stivei - In aceasta secventa se creeaza stiva vida: void init (unsigned &vf) {vf = NULL; }

PRELUCRAREA STIVEI 3. Adaugarea unui nod in stiva: void adauga (unsigned &vf, nod val)

PRELUCRAREA STIVEI 3. Adaugarea unui nod in stiva: void adauga (unsigned &vf, nod val) {if (! este_plina(vf)) { vf++; stiva [vf] = val; }} Exemplu: Pentru o stiva in care se adauga 3 caractere a, b, c operatiile de adaugare se executa astfel: c a b b a a

PRELUCRAREA STIVEI 4. Extragerea unui nod din stiva: void extrage (unsigned &vf) {if (!

PRELUCRAREA STIVEI 4. Extragerea unui nod din stiva: void extrage (unsigned &vf) {if (! este_vida(vf)) vf --; } Exemplu: Eliminarea a doua caractere din stiva se executa astfel: c b b a a a

PRELUCRAREA STIVEI 5. Prelucrarea stivei: void prelucrare (unsigned &vf) { while (! este_vida (vf))

PRELUCRAREA STIVEI 5. Prelucrarea stivei: void prelucrare (unsigned &vf) { while (! este_vida (vf)) { //se prelucreaza stiva[vf]; extrage(vf); } } -Pentru a ajunge la informatia care trebuie prelucrata din stiva trebuie extrase toate nodurile pana la nodul care contine acea informatie. -Pentru a nu pierde informatiile extrase se poate folosi o alta stiva (de rezerva) iar dupa prelucrare nodurile pot fi incarcate din nou in stiva.

sfarsit

sfarsit