Documente Academic
Documente Profesional
Documente Cultură
Stiva este un caz particular al listei, pentru care se pstreaz principiul de funcionare
LIFO, adic, ultimul element intrat n list este i primul element extras din list. De remarcat
este faptul c, n cazul stivei, att operaia de adugare, ct i cea de extragere, se efectueaz
printr-un acelai cap.
Stiva poate fi de dou feluri:
1) Static, adic, pe vector
2) Dinamic, adic, nlnuit
//1. Stiva statica
#include<iostream>
using namespace std;
#define dim 30 //dimensiunea stabilita maximal pentru vector
typedef int stiva[dim]; // s-a construit un tip de date, cu numele 'stiva', dupa dimensiunea
stabilita anterior
stiva st; //st este variabila stiva de lucru
int vf; //ultimul numar de valori din stiva
//functie de testare pentru a afla daca stiva este vida
int empty()
{
if(vf==0) //nu sunt elemente in stiva
return 1;
return 0;
}
//functie de testare daca stiva este ocupata, adica, are toata memoria rezervata
int full()
{
if(vf==dim)
return 1;
return 0;
}
//functie pentru adaugarea unui element in stiva
void push(int e)
{
if(full()!=0)
{
cout<<"Stiva este plina. Nu se mai pot face adaugari\n";
return;
}
st[vf++]=e; //se mai putea scrie si asa: {st[vf]=e; vf++;}
}
//functie pentru extragerea unui element din stiva
int pop()
{
if(empty()!=0)
}
return st[--vf]; //se mai putea scrie si asa: {vf--; st[vf]=e;}
system("pause");
return (0);
COADA
Coada este un caz particular al listei, pentru care se pstreaz principiul de funcionare
FIFO, adic, primul element intrat n list este i primul element extras din list. De remarcat
este faptul c, n cazul stivei, operaiile de adugare i extragere se efectueaz cele dou capete
diferite ale sale.
}
//functie pentru afisarea coada
void write()
{
cout<<"Coada este: ";
for(int i=0;i<vf;i++)
cout<<cd[i]<<' ';
cout<<'\n';
}
//functia principala in rulare
int main()
{
//adaugarea unui element in coada
push(6);
write();
push(7);
write();
push(10);
write();
//extragerea unui element din coada
int e=pop();
cout<<"Elementul extras este: "<<e<<". ";
write();
e=pop();
cout<<"Elementul extras este: "<<e<<". ";
write();
e=pop();
cout<<"Elementul extras este: "<<e<<". ";
write();
e=pop();
system("pause");
return (0);
//3. Stiva inlantuita (in cazul de fata am optat pentru urmatoarea prelucrare: stiva
este o lista pentru care atat operatia de adaugare, cat sic ea de extragere se
efectueaza prin fata listei)
#include<iostream>
using namespace std;
//definirea structurii pentru reprezentarea unui nod al stivei inlantuite
struct nod{
int val;
//continutul elementului
nod *next; //legatura catre elementul vecin urmator
};
typedef struct nod stiva; //constructia unui tip de date, numit stiva, pentru operatiile de tipul
nod, definite mai sus
int main()
{
stiva* vf=NULL; //initializarea listei
//adaugarea unui element in lista
vf=push(vf,6);
write(vf);
vf=push(vf,7);
write(vf);
vf=push(vf,4);
write(vf);
//extragerea din lista
vf=pop(vf);
write(vf);
vf=pop(vf);
write(vf);
vf=pop(vf);
write(vf);
system("pause");
return (0);
}
OBS: Dac stiva este un caz perticular de list pentru care att operaia de
adugare, ct i cea de extragere, se efectueaz prin acelai cap, n cazul cozii,
aceasta este o list, pentru care operaia de adugare presupune introducerea unui
nou element prin spatele listei i extragerea prin faa listei.
vf=push(vf,6);
write(vf);
vf=push(vf,7);
write(vf);
vf=push(vf,4);
write(vf);
//extragerea din lista
vf=pop(vf);
write(vf);
vf=pop(vf);
write(vf);
vf=pop(vf);
write(vf);
system("pause");
return (0);
OBS: Dat fiind diferena dintre cele dou cazuri particulare de list, problema
rezolvrii stivei, respectiv, a cozii, difera doar prin funcia de adugare, (n cazul de
mai sus), care presupune adugarea prin faa listei, dac i extragerea se va face
tot prin faa listei, n cazul stivei, respective, prin spatele listei, iar, extragerea prin
faa listei, n cazul cozii.
Observaie
a
D
C
Figur:
AE
10
3b
Arbori
M
D
A c F
9 12
11
de
B E
P
S
I R Z
cutare
binar
bt->left=bt->right=NULL;
}
else //situatia in care arborele mai continea si alte elemente
if(bt->info>e) /*verificam daca valoarea din radacina este mai mare ca cea
nou venita*/
bt->left=inserare(bt->left,e); /*daca valoarea nou intrata este mai
mica decat cea din radacina, pozitionarea se va face in stanga acesteia*/
else
bt->right=inserare(bt->right,e); /*daca valoarea nou intrata este
mai mare decat cea din radacina, pozitionarea se va face in dreapta acesteia*/
return bt;
system("pause");
return 0;