/* Toate operatiile de baza asupra unei stive implementata prin tipul pointer afisand dupa fiecare operatie continutul stivei. */ #include #include /*pt functia malloc*/ #include /*pt functia toupper*/ typedef struct nod { int info; /*informatia utila din cadrul stivei*/ struct nod *urm; /*un pointer catre urmatorul nod din stiva*/ }Stiva; typedef Stiva* ref; /*pointer catre o structura de tipul Stiva*/ typedef int tipel; ref varf, r; /*varf - pointer catre varful stivei r - pointer auxiliar*/ int er, k;/*er controleaza erorile k pt. cautarea unui element*/ tipel x; void push(ref *, tipel); void pop(ref *, tipel *); int stivid(ref); tipel primul(ref); void listare(void); void initializare(ref); void creare(void); void cautare(); main() { char op; system("cls"); initializare(varf); do { printf("C. Crearea unei stive!\n"); printf("L. Listarea unei stive!\n"); printf("A. Adaugarea unui element!\n"); printf("S. Afiseaza varful stivei!\n"); printf("P. Scoate elementul din varful stivei!\n"); printf("F. Cauta un element in stiva!\n"); printf("E. Exit\n"); printf("Introduceti optiunea : ");fflush(stdin);scanf("%c", &op); op = toupper(op); switch(op) { case 'C':creare();listare();break; case 'L':listare();break; case 'A': printf("Introduceti valoarea ce trebuie adaugata : "); scanf("%d", &x); er = 0; push(&varf, x); listare(); break; case 'S': er = 0; x = primul(varf); if(er==0) printf("Elementul din varful stivei este : %d\n", x); else printf("Stiva este vida!\n"); break; case 'P': er = 0; pop(&varf, &x); if(er == 0) printf("Elementul din varful stivei este : %d\n", x); listare(); break; case 'F': printf("Introduceti elementul pe care doriti sa-l cautati : "); scanf("%d", &k); cautare(); if(r==NULL) printf("Elementul nu exista in stiva!\n"); else printf("Elementul exista in stiva!\n"); break; case 'E':break; default: printf("Optiune incorecta!\n"); getch(); } printf("Apasati o tasta pt a continua!\n");getch(); system("cls"); } while(op!='E'); } void creare(void) { char op; do { printf("Introduceti elementul : "); scanf("%d", &x); push(&varf, x); printf("Continuati?(D/N) "); fflush(stdin);scanf("%c", &op); op = toupper(op); } while(op=='D'); }/*sfarsit creare()*/ void initializare(ref varf)/*initializeaza stiva*/ { varf = NULL; }/*sfarsit initializare*/ tipel primul(Stiva *s)/*intoarce elementul din varful stivei*/ { if(stivid(s)) { er = 1; printf("Stiva vida!\n"); return 0; } return varf->info; }/*sfarsit primul*/ int stivid(ref s) { if(s == NULL) return 1; else return 0; }/* stivid */ void push(ref *s, tipel x) /*adauga elementul x in varful stivei s*/ { r = (ref)malloc(sizeof(Stiva)); r->info = x; r->urm = *s; *s = r; }/*sfarsit push(Stiva *, tipel)*/ void pop(ref *s, tipel *x) /*intoarce in x elementul din varful stivei si il sterge din stiva*/ { if(stivid(*s)) { er = 1; printf("Stiva vida!\n"); } else { *x = (*s)->info; r = *s; /*retine adresa nodului pt. a-l sterge*/ *s = (*s)->urm; free(r); } }/*sfarsit pop(Stiva*,tipel)*/ void listare(void) /*listeaza elementele stivei*/ { if(varf==NULL) printf("Lista este vida!\n"); else { printf("Elementele listei sunt :\n"); r = varf; while(r!=NULL) { printf("Informatia = %4d\n", r->info); r = r->urm; } } }/*sfarsit listare*/ void cautare() /*cauta nodul cu cheia k*/ { r = varf; while((r!=NULL) && (r->info!=k)) r = r->urm; }/*sfarsit cautare*/