6. a) Sa se scrie tipurile de date, procedurile si functiile care implementeaza in Turbo Pascal stive inlantuite cu elemennte numere intregi (operatiile init, isEmpty, top, push si pop). b) Completati setul operatiilor definite cu operatia copy: Stiva copy(Stiva s); care realizeaza o copie a stivei primite ca parametru si intoarce aceasta copie. Copia stivei trebuie sa contina aceleasi elemente, in aceeasi ordine, cu stiva initiala. c) Sa se scrie o functie care sterge o stiva (ii goleste continutul). d) Sa se scrie un program care citeste de la intrare un sir de 10 numere intregi. Pe masura ce sint citite, numerele negative sint introduse intr-o stiva. La aparitia (citirea) unui numar pozitiv sint scoase din stiva si afisate un numar de elemente egal cu valoarea acestuia. La aparitia unei valori 0 continutul stivei este salvat prin copiere intr-o stiva auxiliara. In final se cere sa se afiseze continutul stivei si continutul stivei auxiliare. Afisarea stivelor se face in ordinea in care valorile sint scoase din stiva. EXEMPLU DE RULARE: Introduceti numerele: -1 -2 -3 -3 -3 2 -4 0 -5 -6 Continutul stivei: -6 -5 -4 -3 -2 -1 Continutul stivei auxiliare: -4 -3 -2 -1 ===================================================== #include #include #include "stiva.cpp" void CitElemente(Stiva*& p); Stiva* s; void main() { Stiva* p; clrscr(); initStiva(p); CitElemente(p); printf("\nCONTINUTUL STIVEI : "); AfisStiva(p); printf("\nCONTINUTUL STIVEI AUXILIARE : "); AfisStiva(s); getch(); } void CitElemente(Stiva*& p) { int nr=0,semn=1,i; int val = 0; char c; clrscr(); printf("INTRODUCETI ELEMENTELE IN STIVA TERMINATE CU CARACT # \n"); while( (c=getchar()) != '#' ) { if( c == '-' || c == '+' ) semn = (c == '+') ? 1 : -1; if( c >= '0' && c <= '9' ) nr = nr * 10 + c - '0'; if( c == ' ' || c == '\n' || c == '\t' ) { val = nr*semn; if( val < 0 ) { PushElem(p,val); semn = 1; nr = 0; } if ( val == 0 ) s = Duplicate(p); else { if( val > 0 ) { printf("VALORILE SCOASE DIN STIVA SINT : \n"); for ( i=1;i <= val;i++ ) printf(" %d ",PopElem(p)); } val = 0; nr = 0; } } } } #include #include #include #include "stiva.h" int isEmpty(Stiva*& p) { if(p != NULL ) return 0; return -1; } void PushElem(Stiva*& p,Atom data) { Stiva* x; x = new Stiva; x -> data = data; x -> link = p; p = x; } Atom PopElem(Stiva*& p) { Stiva* x; x = p; p = x -> link; return x->data; delete(x); } Atom TopElem(Stiva*& p) { if(isEmpty(p) != 0) printf("STIVA VIDA \a"); else return(p->data); } void initStiva(Stiva*& p) { p = NULL; } void DeleteStiva(Stiva*& p) { Stiva* x; x = p; if(isEmpty(p) != 0) printf("STIVA VIDA \a"); else while ( (p->data) ) { x = p; p = p -> link; delete(x); } } void AfisStiva(Stiva* p) { Stiva* q; q = p; if( isEmpty(p) != 0 ) printf("STIVA VIDA \a"); else { while( q != NULL ) { printf(" %d ",q -> data); q = q -> link; } } } Stiva* Duplicate(Stiva* p) { Stiva* s; s = p; return s; } #ifndef _STIVA_ #define _STIVA_ typedef int Atom; struct Stiva{ Atom data; Stiva* link; }; int isEmpty(Stiva*& p); void PushElem(Stiva*& p,Atom data); Atom PopElem(Stiva*& p); Atom TopElem(Stiva*& p); void initStiva(Stiva*& p); Stiva* Duplicate(Stiva* p); void DeleteStiva(Stiva* p); #endif