Membrii echipei Despa Ruxandra Dumitru Diana Serban Alexandra
Membrii echipei: • Despa Ruxandra • Dumitru Diana • Serban Alexandra Clasa a XI-a C Prof. Coord. : Popescu Cristiana
CUPRINS: 1. Definitie 2. Generalitati 3. Operatii 4. Algoritm-pseudocod 5. Problema cu aplicatie practica 6. Test grila
Definitie--stive Stiva este o structură de date ale cărei elemente sunt considerate a fi puse unul peste altul, astfel încât orice element adăugat se pune în vârful stivei, iar extragerea unui element se poate face numai din vârful acesteia, în ordinea inversă celei în care elementele au fost introduse.
Stivă implementată prin listă : Stivă implementată prin vector :
Generalitati § § Stiva este o structură de date larg utilizată în informatică; Dintre multiplele utilizări, stiva este folosită atât la implementarea algoritmilor recursivi, cât și ca structură auxiliară la traversarea unor structuri de date mai complicate, cum sunt arborii și grafurile; § Implementarea stivei se poate face pe o structură de tip vector, ce presupune cunoașterea apriori a dimensiunii maxime a stivei, sau pe o structură de date tip listă, unde dimensiunea maximă este limitată doar de capacitate memoriei RAM.
Așadar, stiva este un caz particular de listă, în care adăugarea sau eliminarea elementelor se face numai în unul din capetele acesteia, iar pentru parcurgerea unei stive implementate pe o structură de tip listă este suficientă referința către primul element al listei. În cazul când stiva este implementată sub formă de tablou, punerea și eliminarea elementelor se face la capătul „din dreapta” (pe poziția din tablou cu cea mai mare valoare a indicelui). În acest fel, la efectuarea acestor operații nu este necesar să se deplaseze celelalte elemente ale tabloului. Având o dimensiune limitată, în algoritmi, această problemă se rezolvă de obicei, prin copierea stivei curente într-o nouă stivă cu dimensiuni duble.
Operații Stiva este concepută pe principiul LIFO (last in, first out — ultimul intrat este primul ieșit). Principalele operații asupra stivei sunt cele enumerate mai jos. 1. Creare Pentru a crea o stiva vidă se ințializează vârful stivei cu 1 (vârful stivei indică întotdeauna poziția ultimului element, acestea fiind memorate începând cu poziția 0). 2. Inserare Pentru a insera un element e în vârful stivei S (operația push) este necesară, în primul rând, verificarea stivei pentru a stabili dacă este sau nu plină. Dacă acest lucru este îndeplinit, se memorează elementul și se incrementează dimensiunea; în caz contrar sarcina nu se poate îndeplini. Fie o stiva de numere intregi pentru care elementele sunt adaugate in ordinea: 10, 20, 30, 40
La primul pas se creaza stiva caz in care primul element creat va fi varful stivei: 10 vf Apoi se adauga prin operatia push ( ) un nou element, 20: In continuare se adauga 30 care va deveni noul varf:
La sfarsit se adauga 40: 3. Extragere Pentru a extrage un element din vârful stivei (operația pop) trebuie ca stiva să nu fie vidă. Dacă nu este, atunci se reține valoarea din vârful stivei într -o variabilă e și se decrementează vârful. Pentru stergere, prin operatia pop( ) se va sterge elementul din varful stivei, 40, dupa care noul varf va deveni precedentul sau, 30:
Demonstratie LIFO
Problema stiva : citire si afisare in ordine inversa PSEUDOCOD Structura nod Intregi info; Nod adr; Sfarsit structura; Intregi prim; Push<nod p, intregi n> P=nou nod; p->info x; p->adr prim; prim p; sfarsit push; creare< nod p> intregi n, x, i; citeste n; pentru (i=0, i) citeste x; push (x); sfarsit pentru; sfarsit creare; afisare < nod p> pentru(p prim, NULL) afiseaza p->info; sfarsit afisare; MAIN Nod p; Creare(p); Afisare(p); Sfarsit main;
Problema cu aplicatie practica Trompeta Tanarul Victor plictisit sa asculte atata rock si-a gasit o noua pasiune: jazz-ul. Astfel, el s-a tuns, s-a vopsit negru, iar apoi si-a procurat o trompeta. Pentru a-si demonstra calitatile muzicale, el s-a hotarat sa tina un concert live. Din pacate, alte activitati i-au consumat o parte din timpul pentru exersat si acum nu mai este capabil sa cante intreg concertul. Mai exact, din cele N note initiale, el mai poate canta M, deoarece apoi oboseste si incepe sa falseze. Fiecare nota este reprezentata de o valoare din intervalul [0. . 9] care indica gradul de placere pe care il produce publicului daca este cantata. Placerea totala a unui concert este egala cu alipirea notelor cantate privite ca un numar in baza 10. Tanarul Victor s-a gandit ca ar fi bine sa aleaga notele astfel incat concertul sa fie cat mai pe placul publicului, pentru a parea ca se descurca mai bine decat in realitate. Cerinta Fiind date cele N note initiale, gasiti concertul visat de taran. Date de intrare Pe prima linie a fisierului trompeta. in se gasesc numerele N si M. Pe urmatoarea linie sunt date valorile corespunzatoare celor N note. Date de iesire Pe prima linie a fisierului trompeta. out se afla M cifre, reprezentand concertul care va fi cantat. Restrictii 1 ≤ N ≤ 1000000 1≤M≤N Notele din concertul ales trebuie sa fie in ordinea initiala, pentru ca nu strica armonia concertului. Exemplu trompeta. in trompeta. out 54 19990
Rezolvare: #include <iostream> using namespace std; ifstream in("trompeta. in"); ofstream out("trompeta. out"); const int N = 1000008; char nr[N]; struct nod{ char info; nod *adr; }; nod *vf; int n, m, nst, ramase; void adaugare(char c) { ++nst; nod*p=new nod; p->info = c; p->adr=vf; vf=p; } void stergere() { nod*x; --nst; x=vf; vf=vf->adr; delete x; } void afisare(nod *p) { if(p==NULL) return; else { afisare(p->adr); out<<p->info; } } int main() { in >> m ; in >> nr; ramase = n; for(int i=0 ; nr[i] ; i++) { while ( vf != NULL && nr[i]>vf->info && ramase+nst > m ) stergere(); adaugare(nr[i]); ramase--; } afisare(vf); return 0; }
Test grila 1. Se creeaza o stiva sub forma de lista inlantuita. Pe stiva se pun elementele 7, 3, 5 in aceasta ordine. Se scot doua elemente, iar apoi se adauga 2, 6, 8. In final se scoate un element. Ce va contine stiva? a. 7 2 6 b. 7 6 8 c. 7 2 5
2. Intr-o stiva se gasesc elementele 4, 2, 8, 9, 3. Se scot doua elemente, iar apoi se adauga dublul primului scos. Se mai adauga 1, 5, 7 dupa care se scot patru elemente. Ce va contine stiva in final? a. 4 2 6 b. 4 8 1 c. 4 2 8
3. Intr-o stiva se gasesc urmatoarele initiale: D, A, O, R. Se mai adauga V, U, C, dupa care se scot patru. Se adauga L si M, iar apoi se scot trei. In final se adauga N. Ce va afisa stiva? a. D A L b. D O M c. D A N
4. O stiva sub forma de lista inlantuita contine primele 6 numere patrate perfecte aranjate in ordine crescatoare. Se scot 3 numere si se adauga primele 3 numere prime. In final se scot 2 numere. Ce va contine stiva? a. 1 4 9 2 b. 1 4 7 5 c. 1 9 3 6
5. Intr-o stiva se gasesc primele 5 numere impare in ordine descrescatoare. Se scot 2 numere si se adauga primele 3 numere pare in ordine crescatoare. In final se scoate un numar. Ce va contine stiva? a. 9 7 2 3 5 b. 9 7 5 2 4 c. 9 3 6 4 2
Definitie--cozi Coada este o structură de date abstractă, pentru care operatia de inserare a unui element se realizează la un capăt, în timp ce operatia de extragere a unui element se realizează la celălalt capăt. Singurul element din coadă la care avem acces direct este cel de la început.
Generalitati Modul de functionare a unei cozi este foarte usor de intuit: toată lumea a „stat la coadă”, măcar o dată. Orice situatie în care sunt mai multe cereri de acces la o resursă unică (de exemplu, mai multi clienti si o singură vânzătoare; o singură pompă de benzină si mai multe masini, un singur pod si mai multe capre, etc) necesită formarea unei „linii de asteptare”. Dacă nu apar alte priorităti, cererile sunt satisfăcute în ordinea sosirii. Datorită faptului că întotdeauna este extras („servit”) primul element din coadă, iar inserarea oricărui nou element se face la sfârsit („la coadă”), coada este definită ca o structură de date care funcŃionează după principiul FIFO (First In First Out -Primul Intrat Primul Iesit).
Operatii Singurele operatii ce pot fi executate cu o coadă sunt: -crearea unei cozi vide; int Coada[Dim. Max]; Coada C; int Inc, Sf; Inc = 0; Sf = -1; -inserarea unui element în coadă; if (sf == Dim. Max-1) cout<< “Eroare”; else C[++Sf] = x;
-extragerea unui element din coadă; if (Inc > Sf) cout<< “Eroare”; else x = C[Inc++]; - accesarea unui element. x = C[Inc];
Algoritmii de adaugare si eliminare PSEUDOCOD PRIM=0 ULTIM=0 PLIN=fals VID=adevarat functia adauga (ELEM) daca PLIN scrie "Coada plina!" intoarce fals altfel CHEIA[ULTIM]=ELEM VID=fals ULTIM=(ULTIM+1)%LUNG daca ULTIM==PRIM PLIN=adevarat intoarce adevarat functia extrage (ELEM) daca VID scrie "Coada este vida!" intoarce fals altfel ELEM=CHEIA[PRIM] PRIM=(PRIM+1)%LUNG PLIN=FALS daca PRIM==ULTIM VID=adevarat intoarce adevarat
Utilitatea structurii de tip coadă reiese din modul său de functionare – este necesară utilizarea unei cozi atunci când informatiile trebuie prelucrate exact în ordinea în care „au sosit” si ele sunt retinute în coadă până când pot fi prelucrate. În informatică, cozile sunt utilizate frecvent. De exemplu, să considerăm că avem o retea de calculatoare si o singură imprimantă. Când utilizatorii retelei vor da comenzi de tipărire, imprimanta nu poate răspunde tuturor comenzilor în acelasi timp (imaginaŃi-vă ce-ar iesi!). Prin urmare comenzile de tipărire primite sunt înregistrate întro coadă (Print Queue – Coadă de Tipărire). Imprimanta va tipări documentele pe rând, în ordinea în care au fost înregistrate în coadă. Un alt exemplu: pentru a mări viteza de executie, microprocesoarele Intel utilizează o coadă de instructiuni în care sunt memorate instructiunile care urmează a fi executate.
Test grila 1. Cum se implementeaza o coada? a. cu ajutorul unui vector de tip “v”; b. cu ajutorul unei liste inlantuite; c. ambele variante.
2. Cum se realizeaza accesarea sau extragerea unui element al cozii? a. atat accesarea(adaugarea), cat si extragerea se face la un singur capat; b. accesarea(adaugarea) se face la un capat, iar extragerea la celalalt capat;
3. Care este principiul de baza al cozilor ? a. “LIFO” b. ”FIFO” c. ”FILO”
4. Pentru a insera un element x în coada C trebuie, in primul rand: a. sa verificam daca variabila Sf nu depaseste dimensiunea maximă a vectorului; b. sa marim valoarea variabilei Sf cu o unitate; c. sa plasam la sfarsit noul element;
Va multumim pentru atentie!
- Slides: 29