Sunteți pe pagina 1din 10

STRUCTURA DE TIP STIVA

DEFINITIE SI IMPLEMENTARE
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 extragere se efectueaza pe la o singura
extremitate.
vf
•Proprietati:
10
-Extremitatile stivei se numesc baza si varf.
8
- accesul la nodurile stivei este permis numai prin
extremitatea varf. 12
- stiva se mai numeste si structura de tip LIFO (Last In baza
First Out)
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:

unde: tip_data = orice tip al limbajului


const unsigned NMAX=100;
val = valoarea introdusa in nod
typedef <tip_data> 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 == 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)
{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
b b
a a a
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))
{ //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

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