#include /* printf-nek */ #include /* Memóriakezelésnek */ #include /* Az INT_MAX-nak */ struct stack { int elements; char* pData; }; /* Általános megállapodások. 1. Ha a stack üres, a pData NULL, az elements 0. 2. Az pData mutat az elemek tömbjére, dinamikus memóriafoglalással. 3. Az elements jelzi az stackben lévo aktuális elemek számát. 4. A függvények karbantartják a dinamikus memóriaterületet 5. A stack használata elott a meg kell hívni a void stack_init(struct stack* s)-et. 6. A stack használata után meg kell hívni a void stack_cleanUp(struct stack* s)-t. 7. A függvények visszatérése hiba esetén nem nulla */ //3. feladat fv-e(fv túlterhelés) void stack_init(struct stack &s, struct stack &theOther); void stack_init(struct stack &s) { /* Mivel alapértelmezésben a stack két változójának értékei véletlenszámok, inicializálni kell oket. Üres stackkel indulunk. */ // 1. Az s.elements beállítása s.elements=0; // 2. Az s.pData beállítása s.pData=NULL; } void stack_init(struct stack &s, struct stack &theOther) { char *ptrTemp; int i; ptrTemp=(char*)malloc(theOther.elements*sizeof(char)); for(i=0;i='A';i--) { printf("push: %c\n",i); ellenoriz=stack_push(theOther,i); } //Ellenöriznünk kell, hogy a stach_push rendben lezajlott-e. //Ha 0-t kapunk vissza, igen, különben nem, tehát kilépünk. if (ellenoriz!=0) {printf("\n\nHiba tortent! A program futasa megszakad.");exit(-1);} //Ellenörzés vége printf("\nInitialization completed.\n\n"); //theOther feltöltve// ////////////////////////////// stack_init(s,theOther); //meghívjuk a túlterhelt init fv-t } else { printf("\n\nHelytelen valsztas! A program futasa megszakad.\n"); return 0; } } //Menü vége for(i='A';i<='Z';i++) { printf("push: %c\n",i); // Itt nézzük a s.pData változót debuggerbol, lépjünk bele a függvénybe stack_push(s,i); } while(stack_isEmpty(s)) { // Itt nézzük a s.pData változót debuggerbol, lépjünk bele a függvénybe printf("pop: %c\n",(char)stack_pop(s)); } // Üres stackbol kivétel: hiba (-1) printf("pop: %d\n",stack_pop(s)); printf("Cleaning up stack...\n"); stack_cleanUp(s); return 0; }