Sunteți pe pagina 1din 6

In urmatoarele randuri vom vorbi despre doua structuri de date abstracte si anume stiva sicoada.

Vom
parcurge urmatoarele etape.

1. Stiva - definitie
2. Utilitatea stivelor
3. Implementarea unei stive
* Crearea unei stive vide
* Inserarea unui element in stiva
* Extragerea unui element din stiva
* Accesarea elementului de la varf
4. Coada - definitie
5. Utilitatea unei cozi
6. Implementarea unei cozi
* Crearea unei cozi vide
* Inserarea unui element in coada
* Extragerea unui din coada
* Accesarea unui element
* Stiva circulara
7. Aplicatii
8. Exercitii

1. Stiva - definitie
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 de la un singur capat,denumit varful stivei.

Singurul element din stiva la care avem acces direct este cel de la varf.

Operatii caracteristice :
- crearea unei stive vide
- inserarea unui element in stiva(operatie denumita si PUSH)
- extragerea unui element din stiva(operatie denumita si POP)
- accesarea elementului de la varf(operatie de numita si TOP)

Ca sa ne imaginam mai bine functionarea unei stive,sa ne gandim cum lucram cu un teanc de carti foarte
inalt.Cand dorim sa punem o carte in teanc,o punem deasupra,cand dorim sa luam o carte o luam tot pe
cea de deasupra.Motivul este clar de inteles : daca am lua o carte de la mijloc am risca sa daramam tot
teancul sau nu am putea ridica cartile de deasupra pentru ca ar fi prea grele.

Din acest motiv,stiva este definita si ca o structura de date ce functioneaza dupa principiul LIFO ( last in
first out).

2. Utilitatea stivelor
Stiva este necesara pentru memorarea unor informatii si regasirea acestora intr`o anumita
ordine,descrisa de principiul LIFO.Stiva este folosita atunci cand programul trebuie sa amane executia
unor operatii,pentru a le executa ulterior,in ordinea inversa a aparitiilor lor.Un bun exemplu de utilizare
a stivelor il reprezinta evaluarea unor expresii matematice(prin aducerea unei expresii matematice la
forma poloneza,spre exemplu).

3. Implementarea unei stive


Stiva este o structura de date abstracta,ce poate fi implementata in diverse moduri.De exemplu,putem
implementa o stiva ca un vector in care retinem elementele stivei.Pentru ca acest vector sa functioneze
ca o stiva,singurele operatii admise sunt cele caracteristice stivei.

* Declaratiile necesare pentru implementarea unei stive de tip intreg.

Code:
#define MAX_N 200 // numarul maxim de element din stiva
typedef int stiva[MAX_N];

stiva S; //stiva
int vf; //varful stivei

* Crearea unei stive vide


Pentru a crea o stiva vida initializam varful stivei cu -1(varful stivei indica intotdeauna pozitia ultimului
element,elementele fiind memorate de pe pozitia 0).
Code:
vf = -1;

* Inserarea unui element in stiva


Pentru a insera un element in e in stiva S trebuie sa verificam in primul rand daca stiva nu este
plina.Daca acest lucru este indeplinit memoram elementul,in caz contrar nu putem duce la indeplinirea
sarcinii.

Code:
if(vf == MAX_N-1) //daca stiva este plina
cout<<"Stiva este plina,nu am putut insera elementul.\n";
else
S[++vf] = e; //inseram elementul e in stiva

* Extragerea unui element din stiva


Pentru a extrage un element din stiva trebuie sa ne asiguram ca stiva nu este vida.Daca nu
este,atunci retinem valoarea din varful stivei intr`o variabila e si decrementam varful.

Code:
if(vf < 0) // daca stiva este vida
cout<<"Stiva este vida,nu am putut extrage valoarea.\n";
else
e = S[vf--];

* Accesarea elementului de la varf


Accesarea elementului de la varf presupune determinarea valorii acestuia,,valoare pe care noi o vom
retine intr`o variabila denumita e.
Code:
e = S[vf];

4. Coada - definitie
Coada este o structura de date abstracta pentru care operatia de inserare a unui element se realizeaza
de la un capat,in timp ce operatia de extragere a unui element se realizeaza de la celalalt.

Operatii caracteristice
-crearea unei cozi vide
- inserarea unui element in coada
- extragerea unui element din coada
- accesarea unui element
Executarea acestor operatii asupra unei cozi necesita cunoasterea inceputului(inc) si a sfarsitului
acesteia(sf).

Modul de functionare a unui cozi este foarte usor de intuit : cred ca toata lumea a stat la coada,macar
o data.Orice situatie in care sunt mai multe cereri de acces la o resursa unica,necesita formarea unei
"linii de asteptare".Cererile trebuie sa fie efectuate in ordinea sosirii.

Datorita acestui lucru,putem spune ca o coada functioneaza dupa principiul FIFO(first in first out).

5. Utilitatea unei cozi


Utilitatea structurii de tip coada reiese din modul sau de functionare,este necesara utilizarea unei cozi
atunci cand informatiile trebuie prelucrate exact in ordinea in care au fost retinute in coada.Un bun
exemplu de folosire a unei cozi il reprezinta imprimanta,cand un utilizator face mai multe cereri de
imprimare in acelasi timp,ele sunt memorate intr`o coada de tiparire-Queue.Imprimanta le va tipari in
ordinea in care vor aparea.

6. Implementarea unei cozi


Coada este o structura de date abstracta care poate fi implementata,ca si in cazul stivei,in diferite
moduri.In exemplu de mai jos o vom implementa static,retinand elementele intr`un vector.

* Declaratiile necesare pentru implementarea unei cozi de tip intreg.


Code:
#define MAX_N 200 //numarul maxim de elemente din coada
typedef int coada[MAX_N];

coada C; //coada
int inc,sf; //inceputul si sfarsitul cozii

Elementele cozii sunt memorate in vector de la pozitia inc pana la pozitia sf,deci numarul lor este : sf-
inc+1.

* Crearea unei cozi vide


Code:
inc = 0;
sf = -1;
* Inserarea unui element in coada

Code:
if(sf == MAX_N - 1) //numai avem spatiu
cout<<"Coada este plina.\n";
else
C[++sf] = e; //inseram elementul e in coada C

* Extragerea unui element din coada

Code:
if(inc > sf) //coada este vida
cout<<"Coada este vida.\n";
else
e = C[inc++]; //extragem primul element

* Accesarea unui element


Code:
e = C[inc];

* Coada circulara
Se observa ca in acest mod,pe masura ce inseram si extragem elemente,atat sfarsitul,cat si inceputul
cozii tind catre limita maxima a vectorului.Dezavantajul este ca in vector raman pozitii neutilizate(de
la 0 pana la inc-1).De exemplu,am putea avea o situatie in care coada contine un singur element,dar
operatia de inserare sa nu fie posibila pentru ca inc = sf = MAX_N-1.
O solutie care ar rezolva aceasta situatie ar fi reutilizarea spatiului alocat cozii circular.
Pentru aceasta,urmatoarea pozitie dupa pozitia inc poate fi :
- inc + 1,daca inc < MAX_N -1;
- 0 , daca i = MAX_N -1
Concis : (i+1)%DimMax.

7. Aplicatii
Paranteze
Se citeste pe o linie de la tastatura o succesiune de paranteze rotunde deschise si inchise,pana la
intalnirea caracterului '.'. Verificati daca parantezele din sirul citit se inchid corect.

Exemple :

1.paranteze.in
Code:
(()).

paranteze.out
Code:
Parantezele se inchid corect.

2.paranteze.in
Code:
((().

paranteze.out
Code:
Parantezele nu se inchid corect.

3.paranteze.in
Code:
(().

paranteze.out
Code:
Parantezele nu se inchid corect.

Solutie

Vom citi sirul de intrare caracter cu caracter pana la intalnirea caracterului '.'.Pentru fiecare caracter
verificam daca este paranteza deschisa sau inchisa.Daca e paranteza deschisa inseram in coada,iar
daca este paranteza inchisa extragem un element din coada (daca este posibil,daca nu rezulta ca sirul
nu este o expresie corecta).
Dupa citirea intregului sir verificam daca mai sunt elemente in coada,daca raspunsul e afirmativ
inseamna ca sirul este o expresie gresita.
Code:
#include<stdio.h>

#define MAX_COADA 100


char coada[MAX_COADA];
int inc = 0,sf = -1,corect = 1;

int main()
{
char c;
freopen("paranteze.in","r",stdin);
freopen("paranteze.out","w",stdout);

while(scanf("%c",&c) && c != '.')


{
if(c== '(')
{
coada[++sf] = '(';
}
else if(c==')')
{
if(inc <= sf)
inc++;
else corect = 0;
}
}
if(inc <= sf) corect = 0;
if(corect) printf("Parantezele se inchid corect.\n");
else printf("Parantezele nu se inchid corect.\n");

fclose(stdin); fclose(stdout);
return 0;
}

8. Exercitii
1.Modificati solutia de mai sus si calculati dimensiunea maxima a cozii(numarul maxim de paranteze
deschis retinute in coada la un moment dat).
2.Labirint

Se da un labirint dreptunghiular de dimensiuni n X m(n,m <= 100).Pozitiile din stanga sus si din
dreapta jos sunt marcate cu 0,celelalte contin unul dintre numerel 1,2,3,4.Scopul este de a parcurge
labirintul din coltul stanga sus pana la coltul din dreapta jos,pe un drum de lungime minima,pe directii
paralele cu laturile sale.Drumul urmat trebuie sa plece din 0 in 1,apoi din 1 in 2,din 2 in 3,din 3 in
4,din 4 in 1 etc.Se poate ajunge in pozitia finala din oricare pozitie vecina ei.
Din fisierul de intrare INPUT.TXT se vor citi de pe prima linie numerele intregi n si m,care reprezinta
dimensiunile labirintului,iar de pe urmatoarele n linii cate m numere intregi,separate prin cate un
spatiu,reprezentand labirintul.In fisierul de iesire OUTPUT.txt se va afisa pe prima linie numarul minim
de pasi,iar pe cea de`a doua linie,un sir de caractere ce reprezinta succesiunea de miscari de pe cel
mai scurt drum din labirint folosind codificarea : D(jos),U(sus),L(stanga),respectiv R(dreapta).

Exemplu
Input.txt
Code:
5 4
0 1 2 3
3 2 1 4
4 1 2 1
1 4 3 2
2 3 4 0

output.txt
Code:
7
RRRDDDD

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

  • Lab - 1
    Lab - 1
    Document5 pagini
    Lab - 1
    aurelcik prosta
    Încă nu există evaluări
  • ASDN Indrumar
    ASDN Indrumar
    Document80 pagini
    ASDN Indrumar
    Ilie Rumega
    Încă nu există evaluări
  • Laborator 3
    Laborator 3
    Document17 pagini
    Laborator 3
    DorelDjj
    Încă nu există evaluări
  • Poo
    Poo
    Document4 pagini
    Poo
    aurelcik prosta
    Încă nu există evaluări
  • Raport Lab 2 ASDN
    Raport Lab 2 ASDN
    Document4 pagini
    Raport Lab 2 ASDN
    Jessica Alvarez
    Încă nu există evaluări
  • Lab 1 BTD
    Lab 1 BTD
    Document4 pagini
    Lab 1 BTD
    aurelcik prosta
    Încă nu există evaluări
  • Lab 2 BTD
    Lab 2 BTD
    Document5 pagini
    Lab 2 BTD
    aurelcik prosta
    Încă nu există evaluări
  • Lab 2 BTD
    Lab 2 BTD
    Document5 pagini
    Lab 2 BTD
    aurelcik prosta
    Încă nu există evaluări
  • ASDN Indrumar
    ASDN Indrumar
    Document80 pagini
    ASDN Indrumar
    ciumac andrian
    Încă nu există evaluări
  • Lab 2 BTD
    Lab 2 BTD
    Document5 pagini
    Lab 2 BTD
    aurelcik prosta
    Încă nu există evaluări
  • Migratia de Munca Tendinte Si Realitati in RM Sergiu Sainciuc
    Migratia de Munca Tendinte Si Realitati in RM Sergiu Sainciuc
    Document19 pagini
    Migratia de Munca Tendinte Si Realitati in RM Sergiu Sainciuc
    aurelcik prosta
    Încă nu există evaluări
  • Exemplu HTML & CSS
    Exemplu HTML & CSS
    Document10 pagini
    Exemplu HTML & CSS
    aurelcik prosta
    Încă nu există evaluări
  • Lab 1 BTD
    Lab 1 BTD
    Document4 pagini
    Lab 1 BTD
    aurelcik prosta
    Încă nu există evaluări
  • Exempl
    Exempl
    Document12 pagini
    Exempl
    aurelcik prosta
    Încă nu există evaluări
  • Date Candidagaergti Concurs Admitere
    Date Candidagaergti Concurs Admitere
    Document3 pagini
    Date Candidagaergti Concurs Admitere
    Ştefania Bianca
    Încă nu există evaluări
  • Lab 2 BTD
    Lab 2 BTD
    Document5 pagini
    Lab 2 BTD
    aurelcik prosta
    Încă nu există evaluări
  • Polarizarea Radiatiei
    Polarizarea Radiatiei
    Document9 pagini
    Polarizarea Radiatiei
    aurelcik prosta
    Încă nu există evaluări
  • !SDAlab 2 Si 3
    !SDAlab 2 Si 3
    Document2 pagini
    !SDAlab 2 Si 3
    Catalina Bucur
    Încă nu există evaluări
  • !SDAlab 2 Si 3
    !SDAlab 2 Si 3
    Document2 pagini
    !SDAlab 2 Si 3
    Catalina Bucur
    Încă nu există evaluări
  • Lab 2
    Lab 2
    Document4 pagini
    Lab 2
    aurelcik prosta
    Încă nu există evaluări
  • Electromagnetism - Oscilatii Si Unde PDF
    Electromagnetism - Oscilatii Si Unde PDF
    Document96 pagini
    Electromagnetism - Oscilatii Si Unde PDF
    Vlad Rain
    Încă nu există evaluări
  • Lab 2
    Lab 2
    Document4 pagini
    Lab 2
    aurelcik prosta
    Încă nu există evaluări
  • Studiul Difractiei Luminii Pe Obstacole Simple. (Conspecte - MD)
    Studiul Difractiei Luminii Pe Obstacole Simple. (Conspecte - MD)
    Document5 pagini
    Studiul Difractiei Luminii Pe Obstacole Simple. (Conspecte - MD)
    aurelcik prosta
    Încă nu există evaluări