This is an old revision of the document!
O stivă reprezintă o listă cu structuri de date de tipul: Last-In-First-Out (LIFO). Un exemplu comun ar fi un teanc de cărți: tot punem cărți pe o masă, dar în momentul când vrem să le ridicăm începem cu ultima, pusă deasupra teancului.
Definim structura astfel:
struct stack{ int s[size]; int top = -1; } st;
Verificăm dacă stiva e plină sau goală:
int st_full(){ //int st_empty{ if(st.top>=size - 1) //if(st.top==-1) return 1; else return 0; }
Adăugarea:
void push(int item){ st.top++; st.s[st.top]=item; }
Ștergerea:
int pop(){ int item; if(st_empty()) //presupunem ca nu exista elemente return -1; //cu valoarea -1 item = st.s[st.top]; st.top--; return (item); }
Observații:
O coadă este o structură de date ce modelează un buffer de tip First-In-First-Out (FIFO).Astfel, primul element introdus în coadă va fi și primul care va fi scos din coadă.
Definim structura astfel:
struct queue{ int queue[size]; int rear = -1; int front = 0; }Q;
IsEmpty - întoarce 0 dacă coada este goală;1 dacă are cel puțin un element. int Qempty(){
if(Q.front > Q.rear) return 1; return 0;
}
Enqueue / Adăugarea - adaugă un element (entitate) în coadă.Adăugarea se poate face doar la sfârșitul cozii.
void Qinsert(int item){ Q.rear++; Q.queue[Q.rear] = item; }
Dequeue/ștergere - șterge un element din coadă și îl returnează.Ștergerea se poate face doar la începutul cozii.
int Qdelete(){ int item; if( Qempty() ) //in acest caz, alegem o valoare de return return -1; // ce NU poate fi confundata cu un element //presupunem ca NU exista niciun element cu valoarea -1 else { item = Q.queue[Q.front]; Q.front ++; return item; } }
- Implementaţi o stivă folosind două cozi. - Implementaţi o coadă folosind două stive. (utilizarea apelurilor recursive ale unor funcţii se contorizează ca folosirea unei stive) - Implementaţi o stivă cu valori întregi şi o funcţie care obţine valoarea maximă din stivă. Pentru interviu se cere ca funcţia să aibă complexitate de timp constantă ⇒ O(1). - Se dă un vector cu n întregi și un număr k. Aflați valoarea maxima pentru fiecare grupare de k numere de pe poziții consecutive. - Se dă un vector cu datele pentru n clienţi la un server. Pentru fiecare client, datele cunoscute sunt ora la care se conectează şi ora la care se deconectează. Aflaţi numărul maxim de clienţi conectaţi în acelaşi timp la server. Pentru interviu se cere complexitate de timp O(n).