Sunteți pe pagina 1din 34

6/30/2014

1
Cuvinte importante:
- Structura de date stiva: caracteristici, operatii ce pot fi
efectuate asupra stivei;
- Structura de date coada: caracteristici, operatii ce pot fi
efectuate asupra cozii;
- Utilizarea functiilor ca membrii ai tipului de date struct:
declarare, apel.
6/30/2014
2
Structura de date stiva
Stiva este o structura de date abstracta pentru care atat operatia de inserare a unui
element, cat si operatia de extragere a unui element se realizeaza la un singur capat,
denumit varful stivei.
Singurul element din stiva la care exista acces direct este cel de la varf.
Operatiile care pot fi executate asupra unei structurii de tip stiva sunt:
- crearea unei stive vide;
- inserarea unui element in stiva;
- extragerea unui element din stiva;
- accesarea elementului de la varful stivei.
Stiva este definita ca o structura de date care functioneaza dupa principiul LIFO
(Last In First Out - ultimul intrat primul iesit). Acest mod de functionare face ca
ultimul element inserat in stiva sa fie primul extras.
Stiva este utila in situatii in care este necesara memorarea unor informatii si regasirea
acestora intr-o anumita ordine, descrisa de principiul LIFO.
6/30/2014
3
Implementarea unei stive
Stiva este o structura de date, ce poate fi implementata in diferite moduri. Stiva se
poate implementa static cu ajutorul unui vector in care se retin elementele stivei.
Pentru ca un vector sa functioneze ca o stiva, singurele operatii permise sunt
operatiile caracteristice stivei. Varful stivei indica pozitia ultimului element introdus
in stiva. Elementele sunt memorate in vector incepand cu pozitia 0.
Declararea unei stive ca vector cu un numar dat de elemente se poate face astfel:
int <max_elem>;
typedef <tip> <nume_tip_stiva>[<max_elem>];
<nume_tip_stiva> <variabila_stiva>;
<tip> <variabila_varf>;
unde:
- <max_elem> - specifica numarul maxim de elemente din stiva;
- <tip> - specifica tipul elementelor stivei;
- <nume_tip_stiva> - specifica numele tipului stiva;
- <variabila_stiva> - specifica numele variabilei de tip stiva cu numele
<nume_tip_stiva>;
- <variabila_varf> - specifica numele variabilei care identifica varful stivei.
6/30/2014
4
De exemplu, pentru implementarea unei stive cu 10 elemente de tip int, se pot folosi
declaratiile urmatoare:
typedef int stiva [10];
stiva S;
int varf;
Crearea unei stive vide
Pentru a crea o stiva vida se initializeaza varful stivei cu -1, astfel:
<variabila_varf> = -1;
Inserarea unui element in stiva
Pentru a insera un element x intr-o stiva trebuie sa se verifice, in primul rand, daca
stiva nu este plina. Daca stiva este plina, inserarea nu se poate face, altfel se va mari
varful stivei si se va plasa la varf noul element. Deci, la inserare varful stivei urca.
De exemplu, daca se doreste sa se insereze elementul cu valoarea 5 in stiva S de mai
jos, se obtine:

3
10
2

3
10
2
5
Stiva S
inainte de
inserare
Stiva S dupa
inserare
Varf
Varf
6/30/2014
5
Secventa de cod pentru inserarea unui element x in stiva S este prezentata in
continuare:
if (varf == 9)
cout << Stiva este plina\n;
else
S[++varf] = x;
Extragerea unui element din stiva
Pentru a extrage un element dintr-o stiva trebuie sa se verifice, in primul rand, daca
exista elemente in stiva (deci daca stiva nu este vida). Daca da, se retine elementul de
la varful stivei intr-o variabila, dupa care se micsoreaza cu o unitate varful stivei.
Deci, la extragere varful stivei coboara.
De exemplu, daca se doreste sa se extraga un element din stiva S de mai jos, se
obtine:

3
10
2

3
10
Stiva S
inainte de
extragere
Stiva S dupa
extragere
Varf
Varf
6/30/2014
6
Secventa de cod pentru extragerea unui element din stiva S este prezentata in
continuare:
if (varf < 0)
cout << Stiva este vida\n;
else
x = S[varf--] ;
Accesarea elementului de la varf
Prin modul restrictiv de functionare, stiva permite numai accesarea elementului de la
varf. Daca se doreste sa se afle valoarea unui alt element al stivei, ar trebui sa se
goleasca stiva (deci sa se extraga succesiv elemente) pana la elementul dorit.
Accesarea elementului de la varf presupune determinarea valorii acestuia, valoare
care este retinuta intr-o variabila.
Secventa de cod pentru accesarea elementului de la varful stivei S este:
x = S[varf];
Nota: Pentru a executa operatii cu stiva alocata static este suficient sa se cunoasca
varful stivei.
6/30/2014
7
Urmatorul program (stiva.cpp) implementeaza o stiva cu 10 elemente de tip intreg si
efectueaza operatiile de inserare a unui element in stiva, de accesare a elementului din
varf si de extragere a unui element din stiva:
#include <iostream.h>
typedef int stiva [10];
void ins_elem (stiva, int &, int &);
int varf_elem (stiva, int&);
int ext_elem (stiva, int &);
main()
{stiva S;
int varf = -1, i, n, x;
int elem_ramas = 0;
cout << "Introduceti numarul de elemente de inserat in stiva " ;
cin >> n;
if (n >10)
{cout << "S-a depasit numarul maxim de elemente admise in stiva";
return 1;}
else
{cout << "Introduceti numerele ce se vor insera in stiva:\n";
for (i = 0; i < n ; i++)
{cin >> x;
ins_elem (S, x, varf);}}
6/30/2014
8
if (n)
cout << "Elementul din varful stivei este " << varf_elem (S, varf) << endl;
cout << "Precizati numarul de elemente de extras din stiva:" ;
cin >> n;
if (n >10)
{cout << "S-a depasit numarul maxim de elemente admise in stiva";
return 1;}
else
if (varf < 0)
cout << "Stiva este vida\n" ;
else
{
elem_ramas = varf - n +1;
for (i = varf; i >= elem_ramas ; i--)
if (i >= 0)
cout << "Elementul [" << i << "] " << ext_elem (S, varf) << endl;
}
if (elem_ramas >=0)
cout << "Numarul de elemente ramase in stiva " << elem_ramas;
else
{elem_ramas = 0;
cout << "Numarul de elemente ramase in stiva " << elem_ramas;}
return 0;}
6/30/2014
9
void ins_elem (stiva SS, int &nr, int &vf )
{
if (vf == 9)
cout << "Stiva este plina\n";
else
SS[++vf] = nr;
}

int varf_elem (stiva SS, int &vf)
{
return (SS [vf]);
}

int ext_elem (stiva SS, int &vf)
{
if (vf < 0)
{cout << "Stiva este vida\n";
return 0;}
else
return (SS[vf--]);
}
6/30/2014
10
Dupa executia programului pe ecran se afiseaza:
Introduceti numarul de elemente de inserat in stiva 6
Introduceti numerele ce se vor insera in stiva:
23
45
67
89
1
12
Elementul din varful stivei este 12
Precizati numarul de elemente de extras din stiva:4
Elementul [5] 12
Elementul [4] 1
Elementul [3] 89
Elementul [2] 67
Numarul de elemente ramase in stiva 2
6/30/2014
11
Structura de date coada
Coada este o structura de date abstracta pentru care operatia de inserare a unui
element se realizeaza la un capat, in timp ce operatia de extragere a unui element se
realizeaza la celalalt capat.
Singurul element din coada la care exista acces direct este cel de la inceput.
3 10 2
inceput sfarsit
Operatiile care pot fi executate asupra unei structurii de tip coada sunt:
- crearea unei cozi vide;
- inserarea unui element in coada;
- extragerea unui element din coada;
- accesarea unui element din coada.
6/30/2014
12
Datorita faptului ca intodeauna este extras (servit) primul element din coada, iar
inserarea oricarui nou element se face la sfarsit (la coada), coada este definita ca o
structura de date care functioneaza dupa principiul FIFO (First In First Out - primul
intrat primul iesit).
In informatica, cozile sunt utilizate frecvent. De exemplu, pentru a mari viteza de
executie, microprocesoarele Intel utilizeaza o coada de instructiuni in care sunt
memorate instructiunile ce urmeaza a fi executate.
Implementarea unei cozi
Coada este o structura de date, ce poate fi implementata in diferite moduri. Ca si in
cazul stivei, coada poate fi implementata static, retinand elementele sale intr-un
vector. Elementele cozii sunt memorate in vector de la pozitia primului element
introdus in coada (pozitia de inceput) pana la pozitia ultimului element introdus in
coada (pozitia de sfarsit). Rezulta ca, numarul elementelor cozii este: pozitia de
sfarsit - pozitia de inceput +1. Elementele sunt memorate in vector incepand cu
pozitia 0.
6/30/2014
13
Declararea unei cozi ca vector cu un numar dat de elemente se poate face astfel:
int <max_elem>;
typedef <tip> <nume_tip_coada>[<max_elem>];
<nume_tip_coada> <variabila_coada>;
<tip> <variabila_inceput>, <variabila_sfarsit>;
unde:
- <tip> - specifica tipul elementelor cozii;
- <nume_tip_coada> - specifica numele tipului cozii;
- <max_elem> - specifica numarul maxim de elemente din coada;
- <variabila_coada> - specifica numele variabilei de tip coada cu numele
<nume_tip_coada>;
- <variabila_inceput> - specifica numele variabilei care identifica inceputul cozii;
- <variabila_sfarsit> - specifica numele variabilei care identifica sfarsitul cozii.
De exemplu, pentru implementarea unei cozi cu 10 elemente de tip int, se pot folosi
declaratiile urmatoare:
typedef int coada [10];
coada C;
int inceput, sfarsit;
6/30/2014
14
Crearea unei cozi vide
Pentru a crea o coada vida trebuie sa se initializeze variabilele care indica pozitia de
inceput si de sfarsit a cozii, astfel:
<variabila_inceput> = 0;
<variabila_sfarsit> = -1;
Inserarea unui element in coada
Pentru a insera un element in coada trebuie sa se verifice, in primul rand, daca coada
nu este plina, adica valoarea variabilei care indica pozitia de sfarsit a cozii nu
depaseste dimensiunea maxima a vectorului - 1. Daca inserarea se poate face, se
mareste cu o unitate valoarea variabilei care indica pozitia sfarsitului cozii si se
plaseaza la sfarsit noul element.
De exemplu, daca se doreste sa se insereze elementul cu valoarea 5 in coada C de mai
jos, se obtine:
3 10 2
inceput sfarsit
.. 5 3 10 2
inceput sfarsit
Coada C inainte de inserare Coada C dupa inserare
6/30/2014
15
Secventa de cod pentru inserarea unui element x in coada C este prezentata in
continuare:
if (sfarsit == 9)
cout << Coada s-a umplut;
else
C[++sfarsit] = x;
Extragerea unui element din coada
Pentru a extrage un element dintr-o coada C trebuie sa se verifice, in primul rand,
daca valoarea variabilei care indica pozitia de inceput a cozii nu depaseste valoarea
variabilei care indica sfarsitul cozii (coada nu este vida). Daca coada nu este vida, se
retine elementul de la inceputul cozii intr-o variabila, dupa care se mareste cu o
unitate valoarea variabilei care indica pozitia inceputului cozii .
De exemplu, daca se doreste sa se extraga un element din coada C de mai jos, se
obtine:
3 10 2
inceput sfarsit
Coada C inainte de extragere Coada C dupa extragere
3 10
inceput sfarsit
6/30/2014
16
Secventa de cod pentru extragerea unui element din coada C este prezentata in
continuare:
if (inceput > sfarsit)
cout << Coada este vida;
else
x = C[inceput++];
Accesarea unui element din coada
Singurul element al unei cozi care poate fi accesat direct este primul. Daca se doreste
sa se afle valoarea unui alt element, va trebui sa se extraga succesiv elemente pana la
cel dorit (adica sa se goleasca coada).
Accesarea primului element are ca scop determinarea valorii acestuia, valoare care
este retinuta intr-o variabila.
Secventa de cod pentru accesarea primului element din coada este:
x = C[inceput];
6/30/2014
17
Observatie:
In acest mod de alocare statica a unei cozi se observa ca, pe masura ce se insereaza si
se extrag elemente, atat sfarsitul, cat si inceputul cozii se misca inspre limita
maxima a vectorului. Dezavantajul este ca in vector raman pozitii neutilizate (de la 0
pana la inceput - 1). De exemplu, ar putea sa apara o situatie in care coada contine un
element, dar operatia de inserare sa nu mai fie posibila pentru ca:
inceput = sfarsit = lungime_maxima_coada - 1.
O solutie ar fi sa se deplaseze toate elementele din coada catre inceputul cozii, de
fiecare data cand stergem un element. Dar, aceasta operatie este extrem de
ineficienta. Este mai bine sa se pastreze toate elementele pe loc, deplasand numai
inceputul si sfarsitul cozii, reutilizand circular spatiul de memorie.
Implementarea unei cozi circulare
Pentru a evita situatia in care nu se mai pot insera noi elemente, desi coada nu este
plina, inceputul cozii si sfarsitul cozii se pot intoarce catre inceputul tabloului.
Rezulta o coada circulara (denumita si tampon inelar).
6/30/2014
18
Principiul intoarcerii catre inceputul tabloului
Sa presupunem o coada cu dimensiunea maxima de 10 elementa. Sa presupunem ca
la un momet dat s-a ajuns dupa stergeri si inserari succesive la situatia de mai jos:
50
Element
nou:
Cum se poate insera un element nou care are, de exemplu, valoarea 50 ?
Noul element va fi inserat in celula cu indicele 0. Situatia este ilustrata mai jos:
44 21 5 32 6 80 9
9 8 7 6 5 4 3 2 1 0
inceput sfarsit
DimMax - 1
sfarsit
DimMax - 1
44 21 5 32 6 80 9 50
9 8 7 6 5 4 3 2 1 0
inceput
Aceasta situatie poarta numele de secventa intrerupta; elementele din coada sunt
dispuse in doua secvente disjuncte din tablou. Sfarsitul cozii este acum situat in
fata inceputului cozii, adica invers fata de dispunerea initiala.
6/30/2014
19
In aceasta noua dispunere a elementelor, presupunem ca, se sterge un numar
suficient de elemente. Dupa stergeri succesive, si inceputul cozii va ajunge la
pozitia 0 in tablou. In acest mod se ajunge la dispunerea initiala, in care inceputul
cozii este situat in fata sfarsitului cozii iar elementele sunt dispuse intr-o secventa
continua.
Declararea unei cozi circulare ca vector cu un numar dat de elemente se poate
face astfel:
int <max_elem>;
typedef <tip> <nume_tip_coada>[<max_elem>];
<nume_tip_coada> <variabila_coada>;
<tip> <variabila_inceput>, <variabila_sfarsit>, <nr_elemente>;
unde:
- <nr_elemente> - indica numarul curent de elemente din coada.
De exemplu, pentru implementarea unei cozi circulare cu 10 elemente de tip int, se
pot folosi declaratiile urmatoare:
typedef int coada [10];
coada C;
int inceput, sfarsit, nelem;
6/30/2014
20
Inserarea unui element in coada circulara
Pentru a insera un element in coada circulara trebuie sa se verifice, in primul rand,
daca coada nu este plina, adica numarul de elemente din coada este egal cu
dimensiunea maxima a cozii. Daca inserarea se poate face, se testeaza daca valoarea
variabilei care indica pozitia de sfarsit a cozii nu depaseste dimensiunea maxima a
vectorului. Daca s-a ajuns la dimensiunea maxima a cozii, atunci pozitia de sfarsit a
cozii se initializeaza la -1. Daca nu, se mareste cu o unitate valoarea variabilei care
indica pozitia sfarsitului cozii si se plaseaza la sfarsit noul element. Apoi, se mareste
cu o unitate numarul curent de elemente din coada.
Secventa de cod pentru inserarea unui element x in coada C circulara este prezentata
in continuare:
if (nelem == 10)
cout << Coada este plina\n
else
{
if (sfarsit == 9)
sfarsit = -1;
C[++sfarsit] = x;
nelem++;
}
6/30/2014
21
Extragerea unui element din coada circulara
Pentru a extrage un element dintr-o coada circulara C trebuie sa se verifice, in primul
rand, daca numarul de elemente din coada este diferit de 0 (coada nu este vida). Daca
da, se retine elementul din pozitia care specifica inceputul cozii intr-o variabila
temporara, dupa care se mareste cu o unitate valoarea variabilei care indica pozitia
inceputului cozii. Daca in urma incrementarii, pozitia de inceput a cozii devine egala
cu dimensiunea maxima a cozii, atunci pozitia de inceput a cozii se initializeaza la 0.
Apoi, se micsoreaza cu o unitate numarul curent de elemente din coada.
Secventa de cod pentru extragerea unui element x din coada C circulara este
prezentata in continuare:
if (nelem == 0)
cout << Coada este vida\n;
else
{
x = C[inceput++];
if (inceput == 10)
inceput = 0;
nelem--;
}
6/30/2014
22
Urmatorul program (coada.cpp) implementeaza o coada circulara cu 10 elemente de
tip intreg si efectueaza operatiile de inserare a unui element in coada, de accesare a
primului element si de extragere a unui element din coada:
#include <iostream.h>
typedef int coada [10];
void ins_elem (coada, int &, int &, int &);
int prim_elem (coada, int&);
int ext_elem (coada, int &, int &);
main()
{coada C;
int inceput = 0, sfarsit = -1, nelem = 0;
int i, n, x;
cout << "Introduceti numarul de elemente de inserat in coada " ;
cin >> n;
if (n >10)
{cout << "S-a depasit numarul maxim de elemente admise in coada";
return 1;}
else
{cout << "Introduceti numerele ce se vor insera in coada:\n";
for (i = 0; i < n ; i++)
{cin >> x;
ins_elem (C, x, sfarsit, nelem);}}
6/30/2014
23
if (n)
cout << "Primul element din coada este " << prim_elem (C, inceput) << endl;
cout << "Precizati numarul de elemente de extras din coada:" ;
cin >> n;
if (n >10)
{cout << "S-a depasit numarul maxim de elemente admise in coada";
return 1;}
else
for (i = 0; i < n ; i++)
if (nelem)
cout << "Elementul [" << i << "] " << ext_elem (C, inceput, nelem) << endl;
cout << "Numarul de elemente ramase in coada " << (sfarsit - inceput + 1);
return 0;}

void ins_elem (coada CC, int &nr, int &sf, int &ne)
{if (ne == 10)
cout << "Coada este plina\n";
else
{if (sf == 9)
sf = -1;
CC[++sf] = nr;
ne++;
}}
6/30/2014
24
int prim_elem (coada CC, int &inc)
{
return (CC [inc]);
}

int ext_elem (coada CC, int &inc, int &ne)
{
int nr;
if (ne == 0)
{cout << "Coada este vida\n";
return 0; }
else
{
nr = CC[inc++];
if (inc == 10)
inc = 0;
ne--;
return (nr);
}
}
6/30/2014
25
Dupa executia programului pe ecran se afiseaza:
Introduceti numarul de elemente de inserat in coada 6
Introduceti numerele ce se vor insera in coada:
23
45
67
89
1
12
Primul element din coada este 23
Precizati numarul de elemente de extras din coada:4
Elementul [0] 23
Elementul [1] 45
Elementul [2] 67
Elementul [3] 89
Numarul de elemente ramase in coada 2
6/30/2014
26
Utilizarea functiilor ca membrii ai tipului de date struct
In limbajul C, se pot folosi pointeri la functii ca membrii ai unei structuri de date
struct.
De exemplu, formatul unui tip de date de tip struct cu numele stiva care contine
pointeri la functii arata astfel:
struct stiva
{int zona_s[10];
int vf;
void (*ptr_ins_elem) (int);
int (*ptr_varf_elem) ();
int (*ptr_ext_elem) ();};
Limbajul C++ aduce facilitati in folosirea functiilor ca membrii ai tipului de date
struct, in sensul ca declaratiile functiilor se introduc pur si simplu in cadrul structurii
respective. Corpul functiei poate fi plasat in interiorul structurii struct sau in afara
acesteia.
6/30/2014
27
Definirea unei functii membru in interiorul tipului de date struct in limbajul
C++
Cand tipul de date struct contine un membru care este o functie, se poate plasa
corpul functiei in interiorul structurii.
Ca exemplu se poate lua structura abstracta stiva. Aceasta structura de date are doua
caracteristici sau atribute:
- zona de memorie cu o anumita dimensiune (tabloul de memorie);
- varful stivei prin care se insereaza sau din care se extrag elemente din
stiva.
De asemenea, principalele operatii care se pot executa asupra stivei sunt
- inserarea unui element in stiva;
- extragerea unui element din stiva;
- accesarea elementului din varful stivei.
Atat atributele cat si operatiile ce pot fi executate asupra stivei pot fi reunite intr-un
tip de date de tip struct.
6/30/2014
28
Tipul de date struct cu numele stiva, este ilustrat mai jos:
struct stiva
{ int zona_s[10];
int vf;
void ins_elem (int &nr)
{if (vf == 9)
cout << "Stiva este plina\n";
else
zona_s[++vf] = nr;};
int varf_elem ()
{return (zona_s [vf]);};
int ext_elem ()
{if (vf < 0)
{cout << "Stiva este vida\n";
return 0;}
else
return zona_s[vf--];};
};
in care: variabilele zona_s[10] si vf reprezinta zona de memorie alocata stivei si,
respectiv, varful stivei; ins_elem - este o functie care realizeaza operatia de inserare a
unui element in stiva; vf_elem - este o functie care realizeaza accesarea elementului
din varful stivei; ext_elem - este o functie care realizeaza extragerea unui element din
stiva.
6/30/2014
29
Definirea unei functii membru in exteriorul tipului de date struct in limbajul
C++
Cand tipul de date struct contine un membru care este o functie, se poate plasa
corpul functiei in exteriorul structurii.
De exemplu, tipul de date struct cu numele stiva, care contine functii membre
definite in afara structurii este ilustrat mai jos:
struct stiva
{int zona_s[10];
int vf;
void ins_elem (int &nr);
int varf_elem ();
int ext_elem ();
};
void stiva::ins_elem (int &nr)
{if (vf == 9)
cout << "Stiva este plina\n";
else
zona_s[++vf] = nr;}
int stiva::varf_elem ()
{return (zona_s [vf]);}
6/30/2014
30
int stiva::ext_elem ()
{if (vf < 0)
{cout << "Stiva este vida\n";
return 0;}
else
return zona_s[vf--];}
Nota:
1. Din exemplul prezentat se observa ca, pentru a identifica functia ca membru al
structurii, atunci cand ea este definita in afara structurii, este necesar ca numele ei sa
fie precedat de numele structurii, urmat de doua puncte duble (::).
2.O functie membra a tipului de date struct poate sa contina, in corpul sau,
instructiunii care fac referire la variabilele membre ale tipului de data struct.
De exemplu, functia varf_elem, din exemplul prezentat, foloseste atat membrul cu
numele zona_s cat si membrul cu numele vf:
int stiva::varf_elem ()
{return (zona_s [vf]);}
6/30/2014
31
Transmiterea parametrilor catre o functie membra
Atunci cand se plaseaza o functie ca un membru la tipul de data struct, se poate trata
functia exact la fel ca orice functie C++. Deci, se pot transmite parametrii catre
functie si se pot declara variabile locale in cadrul functiei.
De exemplu, functia ins_elem, din exemplul prezentat, are un parametru cu numele nr
in care se vor memora elementele stivei transmise de programul principal.
Declararea unei variabile de tip struct care are functii membre se face la fel ca la
o variabila de tip struct obisnuita.
De exemplu, variabila S este declarata ca o variabila de tipul struct cu numele stiva,
ca mai jos:
stiva S;
Apelul unei functii care este membra a unui tip de date struct
Pentru a apela o functie in cadrul programului, este necesar ca numele ei sa fie
precedat de numele variabilei de tip structura, urmat de operatorul punct (.).
De exemplu, apelul functiei ins_elem in cadrul programului este de forma:
S.ins_elem (x);
6/30/2014
32
Exemplul urmator (stiva_struct1.cpp) ilustreaza modul de folosire a functiilor ca
membrii ai tipului de date struct, pentru crearea unei stive si efectuarea operatiilor
specifice stivei:
#include <iostream.h>
struct stiva
{ int zona_s[10];
int vf;
void ins_elem (int &nr);
int varf_elem ();
int ext_elem ();};
void stiva::ins_elem (int &nr)
{if (vf == 9)
cout << "Stiva este plina\n";
else
zona_s[++vf] = nr;}
int stiva::varf_elem ()
{return (zona_s [vf]);}
int stiva::ext_elem ()
{if (vf < 0)
{cout << "Stiva este vida\n"; return 0;}
else
return zona_s[vf--];}
6/30/2014
33
main()
{
int i, n, x;
int elem_ramas = 0;
stiva S;
S.vf = -1;
cout << "Introduceti numarul de elemente de inserat in stiva " ;
cin >> n;
if (n >10)
{cout << "S-a depasit numarul maxim de elemente admise in stiva";
return 1;}
else
{
cout << "Introduceti numerele ce se vor insera in stiva:\n";
for (i = 0; i < n ; i++)
{cin >> x;
S.ins_elem (x);}
}
if (n)
cout << "Elementul din varful stivei este " << S.varf_elem () << endl;
6/30/2014
34
cout << "Precizati numarul de elemente de extras din stiva:" ;
cin >> n;
if (n >10)
{cout << "S-a depasit numarul maxim de elemente admise in stiva";
return 1;}
else
if (S.vf < 0)
cout << "Stiva este vida\n" ;
else
{
elem_ramas = S.vf - n +1;
for (i = S.vf; i >= elem_ramas ; i--)
if (i >= 0)
cout << "Elementul [" << i << "] " << S.ext_elem () << endl;
}
if (elem_ramas >=0)
cout << "Numarul de elemente ramase in stiva " << elem_ramas;
else
{elem_ramas = 0;
cout << "Numarul de elemente ramase in stiva " << elem_ramas;}
return 0;
}

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