Você está na página 1de 16

12/05/2014

Liste particulare
Stiva
Coada
1
2 12/05/2014

Stiva
Stiva este o structura de date pentru care operatia de inserare
a unui element in structura si operatia de extragere a unui
element se realizeaza la acelasi capat ( varful stivei).

Ultimul element inserat in stiva este primul extras).

Functioneaza dupa principiul LIFO (Last In First Out - Ultimul


intrat, primul iesit).

STIVA
3 12/05/2014

OPERATII CARACTERISTICE

1.Crearea unei stive vide


2. Inserarea unui element in stiva( PUSH)
3. Extragerea unui element din stiva( POP)
4. Accesarea elementului de la varf( TOP)

STIVA
4 12/05/2014

struct nod
{ int info;
nod * adr;};
5 12/05/2014

1.Crearea unei stive vide


nod * vf;

vf=NULL;
6 12/05/2014

2.Inserarea unui element in stiva


( PUSH)
void push(nod* &vf,int x)
{ nod *p;
if(!vf)
{ vf=new nod;
vf->info=x;
vf->urm=0;}
else
{ p=new nod;
p->urm=v;
p->info=x;
vf=p;}
vf
}
7 12/05/2014

3. Extragerea unui element din stiva


( POP)
void pop ( nod * & vf )
{ nod* p;
if(!vf) p vf 7 | adresa

cout<<"stiva vida ";


else
{p=vf; 8 | adresa
vf=vf->urm;
delete p;}
} 5 | 0
8 12/05/2014

4. Accesarea elementului de la varf


( TOP)
int top( nod *&vf)
{ return vf->info ;} vf 7 | adresa

7
8 | adresa

5 | 0
9 12/05/2014

Coada
Coada este o structura de date pentru care operatia de
inserare a unui element se realizeaza la un capat, iar operatia
de extragere a unui element se realizeaza la celalalt capat.

Coada este definita ca o structura de date care functioneaza


dupa principiul FIFO (First In, First Out - Primul intrat, primul iesit).

COADA
10 12/05/2014

OPERATII CARACTERISTICE

1. Crearea unei cozi vide


2. Inserarea unui element in coada
3. Extragerea unui element din coada
4. Accesarea unui element din coada

COADA
11 12/05/2014

1. Crearea unei cozi vide


Nod *inc, *sf;

sf=NULL; inc=NULL;
12 12/05/2014

2. Inserarea unui element in


coada
void put(nod* &inc , nod* &sf ,int x)
{ nod *p;
if(inc==NULL)
{ inc=new nod;
inc->info=x;
inc->urm=NULL;
sf=inc; }
else
{p=new nod;
p->info=x;
p->urm=NULL;
sf->urm=p;
sf=p;
}
}

31 0
adr 89 0
adr 42 0

inc sf p p
13 12/05/2014

3. Extragerea unui element din


coada
void get(nod* &inc)
{ nod* p;
if(!inc)
cout<<"coada vida ";
else
{ p=inc;
inc=inc->urm;
delete p;}
}

31 adr 89 adr 42 0

inc p sf
14 12/05/2014

Accesarea unui element din


coada
int top( nod *&inc)
{ return inc->info ;}

31

31 0
adr 89 adr
0 42 0

inc sf
15 12/05/2014
Structure de date alocate dinamic
Stiva si coada

Fisa de lucru

1. De la orice numar natural n se poate ajunge la valoarea 1 daca asupra lui n se realizeaza
urmatoarele modificari :

- Daca n este par , se injumatateste (n=n/2) ;


- Daca n este impar se inmulteste cu 3 si se adauga 1 (n =n*3+1) ;

Sa se scrie un program care sa genereze sirul transformarilor valorii lui n , prin utilizarea unei cozi.
Care este valoarea maxima memorata de n in sirul acestor transformari ? Cite modificari ale
valorii lui n au fost necesare pentru a ajunge de la valoarea initiala la valoarea maxima?

De exemplu :
Pentru n=6 , sirul transformarilor este 6,3,10,5,16,8,4,2,1
Pentru n=9 , sirul transformarilor este 9,28,14,7,22,11,34,17,52, 26,13,40,20, 10,5, 16,8, 4,2,1

2. Se consideră un şir de numere întregi. Să se scrie un program care construieşte două stive
(una cu numerele prime şi una cu cele care nu sint prime) ce conţin numerele în ordinea
iniţială folosind doar structuri de tip stivă. Sa se afiseze continutul celor 2 stive.
16 12/05/2014

Tema

Sa se scrie un program C++ care sa determine si sa


afiseze daca un sir de paranteze inchise si deschise
este parantezat corect, utilizind o structura de tip
coada.

De exemplu :
sirul ( ( ( ) ) ( ) ( ( ) ) ) este un sir parantezat corect.
sirul ( ) ( ( este un sir care nu este parantezat corect.

Você também pode gostar