Documente Academic
Documente Profesional
Documente Cultură
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,realizata prin intermediul unui vector.
Concluzie: cea mai simpla implementare a stivelor este cea secventiala cu ajutorul unui vector.
DECLARAREA STIVEI
Sintaxa:
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;}
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:
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.
APLICATIE:
1.Dat fiind un șir de caractere, să se inverseze ordinea caracterelor folosind o
stivă.
Rezolvarea constă în parcurgerea șirului de caractere și plasarea fiecărui
caracter pe stivă. După ce s-a terminat de parcurs șirul, se extrag caracterele din
stivă și se adaugă la un nou șir de caractere. Aceasta va fi șirul inversat.
#include <iostream>
#include <stack>
#include <string>
s.push(input[i]);
// pop each character off the stack and add to output string
while (!s.empty()) {
output += s.top();
s.pop();
return output;
int main() {
return 0;}
În acest exemplu, se definește o funcție reverseString care primește un șir de caractere input.
Se creează o stivă s și un șir de caractere output. Fiecare caracter din input este plasat pe stivă
folosind funcția push(). Apoi, fiecare caracter este extras din stivă și adăugat la sfârșitul șirului
output folosind funcția top() și pop(). La sfârșit, funcția returnează șirul inversat output.
În acest exemplu, șirul de intrare este "hello world", iar șirul de ieșire este "dlrow olleh".
2. Scrieți un program care primește un șir de paranteze și verifică dacă acesta este format
corect, adică toate parantezele se deschid și se închid corect, fără erori.
Rezolvare:
Programul va utiliza o stivă pentru a verifica dacă parantezele se deschid și se închid în ordine
corectă.
Algoritmul constă în parcurgerea șirului de paranteze și introducerea fiecărei paranteze deschise
pe stivă. Dacă se întâlnește o paranteză închisă, se va verifica dacă aceasta corespunde cu
ultima paranteză deschisă, scoțând ultimul element din stivă.
Dacă la final stiva este goală, înseamnă că șirul de paranteze este format corect.
Codul programului ar putea arăta astfel:
#include <iostream>
#include <stack>
#include <string>
stack<char> stiva;
stiva.push(paranteza);
if (stiva.empty()) {
return false;
stiva.pop();
stiva.pop();
stiva.pop();
} else {
return false;
}
}
}
return stiva.empty();
int main() {
string expresie;
cout << "Introduceti o expresie cu paranteze: ";
if (verificaParanteze(expresie)) {
} else {
}
return 0;