Stive [C]
2Stiva este o structura de date abstracta, in care se retin date, cu scopul de a le folosi in ordine inversa introducerii. Folosind un limbaj mai tehnic, putem defini o stiva ca fiind o lista de tip LIFO (Last In First Out). Pentru a intelege mai bine aceasta notiune ne putem imagina stiva ca pe un turn de cuburi. Putem lua numai cubul din varf, pentru ca daca am luat unul de la baza, intreaga constriuctie s-ar prabusi. De asemenea, putem adauga cuburi pentru ca turnul nostru sa creasca.
Putem retine o stiva intr-un vector, sau putem declara un tip. Eu prefer varianta cu vectori. Declararea se face astfel :
int stiva[1000]; Â Â /* vectorul nostru stiva se numeste sugestiv stiva */ int varf = 0; Â /* variabila varf retine cate elemente avem in stiva si cu ajutorul ei putem accesa elementul din varf */
Operatiile care se pot face asupra unei stive sunt urmatoarele :
Push
Insereaza un element in varful stivei. Cand dorim sa efectuam aceasta operatie este necesar sa verificam daca stiva este deja plina. Vom defini o constanta DIM care va reprezenta dimensiunea stivei.
#define DIM 10000 if (varf + 1 > DIM) printf ("Stiva este deja plina !"); else { varf ++; printf ("Introduceti elementul : "); scanf ("%d", &stiva[varf]); }
Pop
Scoate primul element din stiva. Trebuie de fiecare data se verificam daca stiva este vida sau nu.
if (varf <= 0) printf ("Stiva este vida !"); else varf --;
Top
Acceseaza primul element din stiva si il retine intr-o variabila.
int registru; Â /* in variabila registru vom retine elemenul din varf */ registru = stiva[varf]; printf ("Valoarea primului element din stiva este : %d", registru);
Completare – Stack in STL
O alternativa pentru pasionatii de STL este stack. Acest adaptor este o restrictie a Containerul, permitand doar operatia de inserare, stergere si inspectare a elementului de deasupra.
Pentru a intelege mai bine lucrul cu stive scrieti un program care simuleaza o stiva. Utilizati functii pentru fiecare operatie. De asemenea, puteti incerca niste probleme de pe .campion care se rezolva cu stive. O sa revin cu un articol despre cozi, structuri asemanatoare cu stivele. Numai bine ! 🙂
Salut,frumos articolul, insa era mai bine daca il faceai in asa fel incat sa se si aprofundeze umpic notiunea de stiva.Totodata, era frumos daca puneai niste probleme, in ordinea dificultatii.Oricum,e bun articolul,adica mie,cel putin, mi s-a parut bun.
E OK articolul, se puteau, insa, introduce si functii pentru a verifica daca stiva este goala sau plina, si o functie pentru a goli stiva (varf = 0). Asta ar fi ajutat mai departe, in „real world” o stiva goala sau plina din/in care vrei sa scoti/adaugi elemente genereaza „stack underflow”, repsectiv „stack overflow”.