Documente Academic
Documente Profesional
Documente Cultură
Stiva Coada
Stiva Coada
5. STIVA I COADA
5. STIVA I COADA
5.1. Stiva
Stiva este o structur de date abstract pentru care att operaia de
inserare a unui element n structur, ct i operaia de extragere a unui
element se realizeaz la un singur capt, denumit vrful stivei.
Singurul element din stiv la care avem acces direct este cel de la vrf.
Operaii caracteristice
...
5
10
0
7
Vrf
Acest mod de funcionare face ca ultimul element inserat n stiv s fie primul
extras. Din acest motiv, stiva este definit i ca o structur de date care funcioneaz dup principiul LIFO (Last In First Out Ultimul Intrat Primul Ieit).
192
5. STIVA I COADA
ordine, descris de principiul LIFO. Stiva este utilizat atunci cnd programul
trebuie s amne execuia unor operaii, pentru a le executa ulterior, n ordinea
invers a apariiei lor. Operaia curent este cea corespunztoare vrfului stivei, n
stiv fiind reinute toate informaiile necesare programului pentru a executa
operaiile respective.
...
5
10
0
7
3
5
10
0
7
vf
vf
193
5. STIVA I COADA
if (vf == DimMax-1)
//stiva este plina
cout<<"Eroare - stiva este plina\n";
else
//inseram elementul x in stiva S
S[++vf] = x;
5
10
0
7
...
vf
10
0
7
vf
if (vf<0)
//stiva este vida
cout<<"Eroare - stiva este vida\n";
else
//extragem elementul de la varf
x = S[vf--];
Observaii
1. Dezavantajul implementrii unei stive ca vector alocat static const n faptul c
indiferent de numrul de elemente existente n stiv, dimensiunea zonei de
memorie alocat stivei este aceeai (DimMax).
2. Pentru a executa operaii cu stiva alocat static este suficient s cunoatem
vrful stivei. Ca s reinem mai uor modul de funcionare a stivei, ne imaginm
c la inserare vrful stivei urc, iar la extragere vrful coboar.
Prof. E. Cerchez; prof. M. erban
194
5. STIVA I COADA
5.2. Coada
Coada este o structur de date abstract, pentru care operaia de inserare a
unui element se realizeaz la un capt, n timp ce operaia de extragere a
unui element se realizeaz la cellalt capt.
Singurul element din coad la care avem acces direct este cel de la nceput.
...
10
Inc
...
Sf
Operaii caracteristice
Singurele operaii ce pot fi executate cu o coad sunt:
crearea unei cozi vide;
inserarea unui element n coad;
extragerea unui element din coad;
accesarea unui element.
Executarea acestor operaii asupra unei cozi presupune cunoaterea nceputului
cozii (s-l notm Inc) i a sfritului acesteia (s-l notm Sf).
Modul de funcionare a unei cozi este foarte uor de intuit: toat lumea a stat la
coad, mcar o dat. Orice situaie n care sunt mai multe cereri de acces la o resurs
unic (de exemplu, mai muli clieni i o singur vnztoare; o singur pomp de benzin
i mai multe maini, un singur pod i mai multe capre, etc) necesit formarea unei linii de
ateptare. Dac nu apar alte prioriti, cererile sunt satisfcute n ordinea sosirii.
Datorit faptului c ntotdeauna este extras (servit) primul element din coad,
iar inserarea oricrui nou element se face la sfrit (la coad), coada este definit
ca o structur de date care funcioneaz dup principiul FIFO (First In First Out
Primul Intrat Primul Ieit).
195
5. STIVA I COADA
Sf
10
Inc
...
Sf
196
5. STIVA I COADA
...
10
Inc
...
Sf
10
Inc
...
Sf
Observaie
n acest mod de alocare static a unei cozi observai c pe msur ce inserm i
extragem elemente, att sfritul, ct i nceputul cozii migreaz ctre limita
maxim a vectorului. Dezavantajul este c n vector rmn poziii neutilizate (de la
0 pn la Inc-1). De exemplu, ar putea s apar o situaie n care coada conine
un element, dar operaia de inserare s nu fie posibil pentru c
Inc=Sf=DimMax-1. O soluie mai bun ar fi de a reutiliza circular spaiul de
memorie alocat cozii. Pentru aceasta, urmtoarea poziie dup poziia i poate fi:
- i+1, dac i<DimMax -1
- 0, dac i=DimMax-1
Acest lucru se poate scrie concis: (i+1)%DimMax.
Prof. E. Cerchez; prof. M. erban
197
5. STIVA I COADA
Caroiaj
Se consider un caroiaj dreptunghiular cu m linii i n coloane, n care pe
anumite poziii sunt plasate obstacole. n poziia iniial (x0,y0) se afl plasat un
mobil. S se determine, pentru toate poziiile n care mobilul poate ajunge, distana
minim de la poziia iniial a mobilului, msurat n deplasri elementare. Prin
deplasare elementar se nelege deplasarea mobilului cu o poziie stnga, dreapta,
sus sau jos.
Labirint
Se d un labirint dreptunghiular de dimensiuni nxm (n,m100). Poziiile din
stnga sus i dreapta jos sunt marcate cu 0, celelalte conin unul dintre numerele 1,
2, 3, 4. Scopul este de a parcurge labirintul din colul stngasus pn la colul din
dreaptajos pe un drum de lungime minim, pe direcii paralele cu laturile sale.
Drumul urmat trebuie s plece din 0 n 1, apoi din 1 n 2, din 2 n 3 din 3 n 4, din
4 n 1 etc. Se poate ajunge n poziia final din oricare poziie vecin ei.
Din fiierul de intrare INPUT.TXT se vor citi de pe prima linie numerele
ntregi n i m, care reprezint dimensiunile labirintului, iar de pe urmtoarele n linii
cte m numere ntregi, separate prin spaiu, reprezentnd labirintul. n fiierul de
ieire OUTPUT.TXT se va afia pe prima linie numrul minim de pai, iar pe cea
de a doua linie un ir de caractere, care reprezint succesiunea de micri de pe cel
mai scurt drum din labirint, folosind codificarea: D (jos), U (sus), L (stnga)
respectiv R (dreapta).
Exemplu
INPUT.TXT
5 4
0 1 2 3
3 2 1 4
4 1 2 1
1 4 3 2
2 3 4 0
OUTPUT.TXT
7
RRRDDDD
Romeo i Julieta:
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=898
Alee
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=831
Paianjen
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=682
Bibliografie
E. Cerchez, M. erban Programarea n limbajul C/C++. Volumul I; Editura
Polirom
Prof. E. Cerchez; prof. M. erban