Sunteți pe pagina 1din 6

Proiect stiva si coada

1. 1. Stiva
Stiva (stack) este o structură de date liniară abstractă, pentru care
sunt definite operațiile de adăugare a unui element și eliminare a unui
element și aceste operații se realizează la un singur capăt al structurii,
numit vârful stivei.

În timpul operațiilor cu stiva avem acces numai la elementul din vârful


stivei

1. 2. Operatii cu stiva
Cu o stivă se pot face următoarele operații:

 inițializarea stivei – crearea unei stive vide;


 verificarea faptului că o stivă este sau nu vidă;
 adăugarea unui nou element pe stivă – elementul devine vârful
stivei. Operația se numește push;
 eliminarea unui element de pe stivă – se va elimina vârful stivei. Un
nou element devine vârf al stivei, sau ea devine vidă. Opera ția se
numește pop;
 identificarea valorii elementului din vârful stivei – accesul la acel
element Operația se numește top.

1. 3. Cand folosim stiva?


Programele au la dispoziție memorie, iar o parte a ei se nume ște de tip
stivă – STACK, tocmai pentru că operațiile cu această memorie se fac
pe principiul stivei. Apelul functiilor, deci și recursivitatea, folosesc
memoria e tip stivă, iar înțelegerea acestor concept cer în țelegerea
modului în care funcționează o stivă.

În programe putem folosi stiva atunci când vrem s ă amân ăm


efectuarea unor operații până la obținerea unor rezultate. De exemplu,
conversia unui număr din baza 10 în baza 2 const ă în efectuarea
succesivă a unor împărțiri la 2. Cifrele reprezentării în baza 2 sunt
resturile împărțirii în ordine inversă. Ne putem imagina c ă la fiecare
împărțire plasăm restul pe o stivă. În final golim stiva și afi șăm valorile
întâlnite.

Exemplu:

class Stack {
private int capacity;
private int size;
private int[] stack;

Stack() {
size = 0;
capacity = 2;
stack = new int[capacity + 1];
}

public int capacity() {


return capacity;
}

public int size() {


return size;
}

private void increaseCapacity() {

capacity = 2*capacity;
int[] copyStack = new int[capacity + 1];

for(int i = 1 ; i <= size ; i++) {


copyStack[i] = stack[i];
}

stack = copyStack;
}

public boolean isEmpty() {


return size == 0;
}

public int push(int value) {


if(size < capacity) {
stack[++size] = value;
} else {
increaseCapacity();
stack[++size] = value;
}
return stack[size];
}

public int pop() {


size -= 1;
return stack[size + 1];
}

public int peek() {


if(size > 0) {
return stack[size];
} else {
return -1;
}
}
}

public class Program


{
public static void main(String[] args) {
Stack stiva = new Stack();
stiva.push(50);
if(!stiva.isEmpty()) {
System.out.println(stiva.push(30));
}
}
}

2. 1. Coada
Coada (queue) este o structură de date abstractă în care opera ția de
adăugare se realizează la un capăt, iar cea de eliminare se realizeaz ă la
celălalt capăt.

În timpul operațiilor cu coada avem acces la un singur element, cel


aflat la începutul cozii – elementul care urmează să se elimine.

2. 2. Operatii cu coada
Cu o coadă se pot face următoarele operații:

 inițializarea cozii – crearea unei cozi vide;


 verificarea faptului că o coadă este sau nu vidă;
 adăugarea unui nou element în coadă. Operația se numește push;
 eliminarea unui element din coadă. Operația se numește pop;
 identificarea valorii elementului de la începutul cozii – accesul la
acel element Operația se numește front.

Operațiile cu coada sunt similare cu modul în care func ționeaz ă coada


la casa de bilete a unui cinematograf. Spectatorii vin și se a șeaz ă
în ordine la coadă, ordinea în care cump ăr ă biletele este aceea în care au
sosit.

Deoarece operațiile de eliminare se fac în aceea și ordine ca cele de


adăugare, coada este o structură de date de tip FIFO – First In First Out.

3. 2. Cum folosim coada?


Vom folosi coada atunci când trebuie să prelucr ăm informa ții într-o ordine
precisă, pe măsură ce acestea sunt identificate. Uneori, informa țiile noi
sunt determinate pe baza celor vechi, deja existente în coad ă.
Mecanismul se numește expandare a cozii și constă în următoarele:

 adăugăm în coadă informații inițiale


 cât timp coada este nevidă (sau până când am determinat rezultatul
căutat)
o scoatem din coadă un element
o cu ajutorul său identificăm noi informații pe care le adăugăm în
coadă

În informatică se folosește coada în numeroase situații:

 tipărirea documentelor la imprimantă se face printr-o coadă de


așteptare – fiecare document se adaugă în coadă imprimantei, iar
tipărirea propriu-zisă se face în momentul eliminări din coadă
 evaluarea soluțiilor la probleme pe pbinfo.ro se face pe principiul
cozii, în ordinea în care au fost postate

Exemplu:

class Queue {
private int capacity;
private int size;
private int parcurgere;
private int[] queue;
Queue() {
size = 0;
parcurgere = 1;
capacity = 2;
queue = new int[capacity + 1];
}

public int capacity() {


return capacity;
}

public int size() {


return size;
}

private void increaseCapacity() {

capacity = 2*capacity;
int[] copyQueue = new int[capacity + 1];

for(int i = 1 ; i <= size ; i++) {


copyQueue[i] = queue[i];
}

queue = copyQueue;
}

public boolean isEmpty() {


return size == 0;
}

public int push(int value) {


if(size < capacity) {
queue[++size] = value;
} else {
increaseCapacity();
queue[++size] = value;
}

return queue[size];
}

public int pop() {


return queue[parcurgere++];
}

public int peek() {


if(size > 0) {
return queue[parcurgere];
} else {
return -1;
}
}
}

public class Program


{
public static void main(String[] args) {
Queue coada = new Queue();
coada.push(50);
if(!coada.isEmpty()) {
coada.push(69);
coada.push(25);
coada.pop();
System.out.println(coada.peek());
}
}
}

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