G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XXIV: gli stack e le liste di variabili strutturate Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 1 G. Amodeo, C. Gaibisso Stack di interi e liste di record • Graficamente: struct stoi_item { ……. struct stoi_item *successivo; }; stoi *stack … … … … … NULL Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 2 G. Amodeo, C. Gaibisso Stack di interi: definizione dei tipi // definizione del tipo strutturato elemento dello // stack di interi struct stoi_item { // valore dell'elemento int valore; // riferimento al prossimo elemento struct stoi_item *successivo; }; // definizione del tipo di una lista di interi typedef struct stoi_item * stoi; Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 3 G. Amodeo, C. Gaibisso InitStack() • La logica: stoi stack NULL • La funzione: // inizializza uno stack di interi a stack vuoto void stoiIni (stoi *stack) { // inizializza lo stack a stack vuoto *stack = NULL; }; Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 4 G. Amodeo, C. Gaibisso Generazione di un nuovo elemento • La logica: struct stoi_item *new_item VALORE NULL • La funzione: // alloca memoria e inizializza un nuovo elemento dello stack struct stoi_item *stoiItemIni(int valore) { // definisce un puntatore per il nuovo elemento dello stack struct stoi_item *new_item; // alloca memoria per il nuovo elemento new_item = (struct stoi_item *) malloc(sizeof(struct stoi_item)); // se l’operazione ha esito positivo if (new_item != NULL) { // inizializza opportunamente i campi valore e successivo new_item -> valore = valore; new_item -> successivo = NULL; }; // restituisce il riferimento al nuovo elemento, se l’allocazione // di memoria ha avuto esito positivo; NULL altrimenti return(new_item); }; Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 5 G. Amodeo, C. Gaibisso Push() • La logica: stoi stack X … … … NULL (1) (2) … NULL struct stoi_item *new_item Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 6 G. Amodeo, C. Gaibisso Push() • La funzione: // Costanti simboliche per gli esiti di una operazione #define NEG_RESULT 0 #define POS_RESULT 1 … // aggiunge un nuovo valore sullo stack int push(stoi *stack, int valore) { // definisce un puntatore al nuovo elemento struct stoi_item *new_item; // inizializza il nuovo elemento new_item = stoiItemIni(valore); // se la generazione del nuovo elemento fallisce termina con esito // negativo if (new_item == NULL) return(NEG_RESULT); // altrimenti inserisce il nuovo elemento sullo stack new_item -> successivo = *stack; *stack = new_item; // termina con esito positivo return(POS_RESULT); }; Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 7 G. Amodeo, C. Gaibisso Pop() • La logica: (2) stoi stack X (1) X valore (3) … … NULL struct stoi_item *temp valore int val Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 8 G. Amodeo, C. Gaibisso Pop() • La funzione: // restituisce ed elimina l’ultimo valore inserito sullo stack int pop(stoi *stack, int *val) { // definisce una variabile di appoggio per la testa dello stack struct stoi_item *temp; // se lo stack e' vuoto termina con esito negativo if (stoiEmpty(*stack)) return(NEG_RESULT); // altrimenti memorizza nella variabile riferita dal parametro val il valore // sulla testa dello stack *val = (*stack) -> valore; // estrae la testa dallo stack e recupera la memoria per questo allocata temp = *stack; *stack = (*stack) -> successivo; free(temp); // termina con esito positivo return(POS_RESULT); } Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 9 G. Amodeo, C. Gaibisso Top() • La logica: stoi *stack valore … … NULL valore int val • La funzione: // restituisce l’ultimo valore inserito sullo stack int top(stoi stack, int *val) { // se lo stack e' vuoto termina con esito negativo if (stoiEmpty(stack)) return(NEG_RESULT); // altrimenti memorizza nella variabile riferita dal parametro val il valore // sulla testa dello stack *val = stack -> valore; // termina con esito positivo return(POS_RESULT); }; Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 10 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi • Specifiche: implementare una soluzione per il tipo di dato astratto stack di interi che preveda le seguenti operazioni: 1. 2. 3. 4. 5. 6. 7. inizializzazione Push() Top() Pop() visualizzazione del contenuto test di stack vuoto reset Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 11 G. Amodeo, C. Gaibisso Organizzazione del codice: file e loro contenuto • Definizione dei tipi: – stoi_tipi.h: definizioni dei tipi, strutturati e non, utilizzati nella implementazione del tipo di dato astratto “stack of integer” (stoi) • Codice sorgente: – stoi_main.c: codice per l’attivazione delle operazioni implementate per il tipo di dato astratto stoi – stoi_ges.c: definizione delle funzioni che implementano le operazioni definite sul tipo di dato astratto stoi – stoi_uti.c: definizione delle utilities di supporto alle funzioni che implementano le operazioni definite sul tipo di dato astratto stoi Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 12 G. Amodeo, C. Gaibisso Organizzazione del codice: file e loro contenuto • Dichiarazioni extern – stoi_ges.h: – stoi_uti.h: dichiarazioni extern delle funzioni che implementano le operazioni definite sul tipo di dato astratto stoi dichiarazioni extern delle utilities di supporto alle funzioni che implementano le operazioni definite sul tipo di dato astratto stoi • Pseudodichiarazioni: – stoi_const.h: pseudodichiarazioni per le costanti simboliche utilizzate nella implementazione del tipo di dato astratto stoi – stoi_msg.h: pseudodichiarazioni per i messaggi restituiti nella implementazione del tipo di dato astratto stoi Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 13 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_tipi.h // Nome e posizione del file: // Lezione_XXIV/stoi_tipi.h // Descrizione del contenuto del file: // definizioni dei tipi, strutturati e non, utilizzati nella // implementazione del tipo di dato astratto “stack of integer” // tramite una lista di variabili strutturate // definizione del tipo strutturato elemento dello stack di interi struct stoi_item { // valore dell'elemento int valore; // riferimento al prossimo elemento struct stoi_item *successivo; }; // definizione del tipo stack di interi typedef struct stoi_item *stoi; Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 14 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_ges.c // Nome e posizione del file: // Lezione_XXIV/stoi_ges.c // Descrizione del contenuto del file: // definizione delle funzioni che implementano le operazioni definite // sul tipo di dato astratto "stack of integer" // PSEUDODICHIARAZIONI // pseudodichiarazioni per i messaggi restituiti nella implementazione del // tipo di dato astratto "stack of integer" #include "./stoi_msg.h" // pseudodichiarazioni per le costanti simboliche utilizzate nella // implementazione del tipo di dato astratto "stack of integer" #include "./stoi_const.h" // DEFINIZIONI DI TIPO // definizioni dei tipi, strutturati e non, utilizzati nella implementazione del tipo // di dato astratto “stack of integer” tramite una lista di variabili strutturate #include "./stoi_tipi.h" Continua … Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 15 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_ges.c // DICHIARAZIONI EXTERN // inclusione del file di intestazione della libreria standard // che contiene definizioni di macro, costanti e dichiarazioni di // funzioni e tipi funzionali alle varie operazioni di I/O #include <stdio.h> // inclusione del file di intestazione della libreria che contiene // definizioni di macro, costanti e dichiarazioni di funzioni e tipi di // interesse generale #include <stdlib.h> // dichiarazioni extern delle utilities di supporto alle funzioni che // implementano le operazioni definite sul tipo di dato astratto //“stack of integer” #include "./stoi_uti.h“ Continua … Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 16 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_ges.c Programmazione di Calcolatori: gli stack e le liste di variabili strutturate Continua … // Nome della funzione: // stoiEmpty() // Tipo, nome e significato dei parametri della funzione: // stoi stack: riferimento alla testa dello stack // Descrizione della funzionalita' implementata: // implementa il test di stack vuoto // Tipo e significato del valore restituito: // int: TRUE se la lista è vuota; // FALSE altrimenti int stoiEmpty(stoi stack) { // restituisce TRUE se lo stack è vuoto, FALSE altrimenti if (stack == NULL) return(TRUE); else return(FALSE); }; 17 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_ges.c Continua … // Nome della funzione: // push() // Tipo, nome e significato dei parametri della funzione: // stoi *stack: riferimento al puntatore di accesso allo stack di interi // int valore: valore da inserire sullo stack // Descrizione della funzionalita' implementata: // inserisce sullo stack un elemento per il valore // Tipo e significato del valore restituito: // int: POS_RESULT se l'operazione ha avuto esito positivo; // NEG_RESULT altrimenti int push(stoi *stack, int valore) { // definisce un puntatore al nuovo elemento struct stoi_item *new_item; // inizializza il nuovo elemento new_item = stoiItemIni(valore); // se la generazione del nuovo elemento fallisce termina con esito negativo if (new_item == NULL) return(NEG_RESULT); // altrimenti inserisce il nuovo elemento sullo stack new_item -> successivo = *stack; *stack = new_item; // termina con esito positivo return(POS_RESULT); }; Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 18 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_ges.c Programmazione di Calcolatori: gli stack e le liste di variabili strutturate Continua … // Nome della funzione: // stoiVis() // Tipo, nome e significato dei parametri della funzione: // stoi stack: riferimento all'ultimo elemento inserito nello stack // Descrizione della funzionalita' implementata: // visualizza gli interi memorizzati nello stack, in ordine // inverso rispetto a quello di inserimento. // Tipo e significato del valore restituito: // alcuno void stoiVis (stoi stack) { // se la lista è vuota visualizza un opportuno messaggio if (stoiEmpty(stack)) printf(EMPTY_STOI); // altrimenti else // scandisce la lista while (stack != NULL) { // visualizza il contenuto dell'elemento corrente printf(" <- %d", stack -> valore); // considera l'elemento successivo a quello corrente stack = stack -> successivo; }; }; 19 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_ges.c Programmazione di Calcolatori: gli stack e le liste di variabili strutturate Continua … // Nome della funzione: // top() // Tipo, nome e significato dei parametri della funzione: // stoi stack: riferimento alla testa dello stack // int *val: riferimento alla variabile nella quale memorizzare // il valore sulla testa dello stack // Descrizione della funzionalita' implementata: // se lo stack non e' vuoto, accede al valore memorizzato dalla testa, // lo memorizza nella variabile riferita dal parametro e termina con // successo. Altrimenti, termina con esito negativo. // Tipo e significato del valore restituito: // int: POS_RESULT se lo stack non e' vuoto; // NEG_RESULT altrimenti int top(stoi stack, int *val) { // se lo stack e' vuoto restituisce esito negativo if (stoiEmpty(stack)) return(NEG_RESULT); // altrimenti memorizza nella variabile riferita dal parametro val // il valore sulla testa dello stack *val = stack-> valore; // termina con esito positivo return(POS_RESULT); } 20 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_ges.c Programmazione di Calcolatori: gli stack e le liste di variabili strutturate Continua … // Nome della funzione: // pop() // Tipo, nome e significato dei parametri della funzione: // stoi *stack: riferimento alla testa dello stack // int *val: riferimento alla variabile nella quale memorizzare // il valore sulla testa dello stack // Descrizione della funzionalita' implementata: // se lo stack non e' vuoto, accede al valore memorizzato dalla testa // e lo memorizza nella variabile riferita dal parametro; estrae la // testa dallo stack recuperando la memoria per questo allocata, e // termina con successo. Termina con esito negativo, altrimenti. // Tipo e significato del valore restituito: // int: POS_RESULT se lo stack non e' vuoto. // NEG_RESULT altrimenti int pop(stoi *stack, int *val) { // definisce una variabile di appoggio per la testa dello stack struct stoi_item *temp; // se lo stack e' vuoto termina con esito negativo if (stoiEmpty(*stack)) return(NEG_RESULT); // altrimenti memorizza nella variabile riferita dal parametro val // il valore sulla testa dello stack *val = (*stack) -> valore; 21 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_ges.c // estrae la testa dallo stack e recupera la memoria per questo allocata temp = *stack; *stack = (*stack) -> successivo; free(temp); // termina con esito positivo return(POS_RESULT); } Continua … Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 22 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_ges.c Programmazione di Calcolatori: gli stack e le liste di variabili strutturate Continua … // Nome della funzione: // stoiReset() // Tipo, nome e significato dei parametri della funzione: // stoi *stack: riferimento al puntatore alla testa dello stack // Descrizione della funzionalita' implementata: // azzera lo stack recuperando tutta la memoria allocata per i // suoi elementi // Tipo e significato del valore restituito: // alcuno void stoiReset (stoi *stack) { // definizione di una variabile intera da utilizzarsi nella // chiamata della pop() int valore; // esegue ripetutamente operazioni di pop() fino ad ottenere // uno stack vuoto while (pop(stack, &valore) != NEG_RESULT); }; 23 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_ges.c // Nome della funzione: // stoiInit() // Tipo, nome e significato dei parametri della funzione: // stoi *stack: riferimento al puntatore alla testa dello stack // Descrizione della funzionalita' implementata: // inizializza uno stack di interi a stack vuoto // Tipo e significato del valore restituito: // alcuno void stoiInit (stoi *stack) { // inizializza lo stack a stack vuoto *stack = NULL; }; Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 24 G. Amodeo, C. Gaibisso Gestione di un Stack di interi: file stoi_ges.h // Nome e posizione del file: // Lezione_XXIV/stoi_ges.h // Descrizione del contenuto del file: // contiene le dichiarazioni extern delle funzioni che implementano le // operazioni definite sul tipo di dato astratto “stack of integer” extern int stoiEmpty(stoi); extern int push(stoi *, int); extern void stoiVis(stoi); extern int top(stoi, int *); extern int pop(stoi *, int *); extern void stoiReset (stoi *); extern void stoiInit(stoi *); Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 25 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_uti.c Continua … // Nome e posizione del file: // Lezione_XXIV/stoi_uti.c // Descrizione del contenuto del file: // definizione delle utilities di supporto alle funzioni che implementano le // operazioni definite sul tipo di dato astratto “stack of integer” // DEFINIZIONI DI TIPO // definizioni dei tipi, strutturati e non, utilizzati nella implementazione del tipo // di dato astratto “stack of integer” tramite una lista di variabili strutturate #include "./stoi_tipi.h" // DICHIARAZIONI EXTERN // inclusione del file di intestazione della libreria // standard che contiene definizioni di macro, // costanti e dichiarazioni di funzioni e tipi funzionali // alle varie operazioni di I/O #include <stdio.h> // inclusione del file di intestazione della libreria che contiene // definizioni di macro, costanti e dichiarazioni di funzioni e tipi // di interesse generale #include <stdlib.h> Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 26 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_uti.c Programmazione di Calcolatori: gli stack e le liste di variabili strutturate Continua … // Nome della funzione: // stoiItemIni() // Tipo, nome e significato dei parametri della funzione: // int valore: intero memorizzato dal nuovo elemento dello stack // Descrizione della funzionalita' implementata: // alloca memoria per un nuovo elemento di uno stack di interi e lo // inizializza con il valore del parametro // Tipo e significato del valore restituito: // struct stoi_item *: riferimento ad un nuovo elemento di uno stack di // interi, se la sua allocazione ha esito positivo; // NULL altrimenti struct stoi_item *stoiItemIni(int valore) { // definisce un puntatore per il nuovo elemento dello stack struct stoi_item *new_item; // alloca memoria per il nuovo elemento new_item = (struct stoi_item *) malloc(sizeof(struct stoi_item)); // se l’operazione ha esito positivo if (new_item != NULL) { // inizializza opportunamente i campi valore e successivo new_item -> valore = valore; new_item -> successivo = NULL; }; 27 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_uti.c // restituisce il riferimento al nuovo elemento, se la sua allocazione // di memoria ha avuto esito positivo, NULL altrimenti return(new_item); }; Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 28 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_uti.h // Nome e posizione del file: // Lezione_XXIV/stoi_uti.h // Descrizione del contenuto del file: // contiene le dichiarazioni extern delle utilities di supporto alle // funzioni che implementano le operazioni definite sul tipo di // dato astratto “stack of integer” extern struct stoi_item *stoiItemIni(int); Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 29 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_main.c Continua … // Nome e posizione del file: // Lezione_XXIV/stoi_main.c // Descrizione del contenuto del file: // codice per l’attivazione delle funzionalità di gestione dello stack // di interi // PSEUDODICHIARAZIONI // pseudodichiarazioni per i messaggi restituiti nella implementazione del // tipo di dato astratto "stack of integer" #include "./stoi_msg.h" // pseudodichiarazioni per le costanti simboliche utilizzate nella // implementazione del tipo di dato astratto "stack of integer" #include "./stoi_const.h" // DEFINIZIONI DI TIPO // definizioni dei tipi, strutturati e non, utilizzati nella implementazione del tipo // di dato astratto “stack of integer” tramite una lista di variabili strutturate #include "./stoi_tipi.h" // DICHIARAZIONE EXTERN // inclusione del file di intestazione della libreria // standard che contiene definizioni di macro, // costanti e dichiarazioni di funzioni e tipi funzionali // alle varie operazioni di I/O #include <stdio.h> Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 30 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_main.c // dichiarazioni extern delle utilities di supporto alle funzioni che implementano // le operazioni definite sul tipo di dato astratto //“stack of integer” #include "./stoi_uti.h“ // dichiarazioni extern delle funzioni che implementano le operazioni // definite sul tipo di dato astratto stoi #include "./stoi_ges.h" Continua … Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 31 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_main.c // Nome della funzione: // StoiMenu() // Tipo, nome e significato dei parametri della funzione: // stck *stack: riferimento al puntatore alla testa dello stack di interi // Descrizione della funzionalita' implementata: // implementa il menu di scelta per le operazioni definite sul tipo di // dato astratto “stack of integer” // Tipo e significato del valore restituito: // alcuno void stoiMenu(stoi *stack) { // definisce e inizializza la variabile che permette l'uscita dal programma int quit = 0; // definisce una variabile per i valori oggetto della push() // e per il risultato della top() e della pop() int valore; Continua … Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 32 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_main.c Programmazione di Calcolatori: gli stack e le liste di variabili strutturate Continua … // visualizza le possibili scelte printf(SELECT_FUN_STOI); printf(PUSH); printf(TOP); printf(POP); printf(RESET_LOI); printf(DISPLAY_STOI); printf(EMPTY_STOI_TEST); printf(LEAVE_MAN_STOI); printf(SELECT_OP_STOI); // acquisisce la scelta scanf("%d", &selezione); // discrimina tra le diverse scelte switch (selezione) { case 1: // Push() // acquisisce il valore oggetto della Push() printf(ITEM_VALUE_REQ); scanf("%d", &valore); // chiama la funzione che implementa l’operazione Push(), // testa l'esito dell'operazione e lo visualizza if (push(stack, valore) == POS_RESULT) printf(POS_RES_MSG); else { printf(NEG_RES_MSG); printf(ITEM_GEN_FAILED); }; break; 33 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_main.c Programmazione di Calcolatori: gli stack e le liste di variabili strutturate Continua … case 2: // Top() // chiama la funzione che implementa l'operazione Top() // valuta l'esito dell'operazione e lo visualizza. Se l'esito e‘ // positivo visualizza il valore sulla testa dello stack if (top(*stack, &valore) == POS_RESULT) printf("\nTop(): %d\n", valore); else printf(POP_FAILED); break; case 3: // Pop() // chiama la funzione che implementa l'operazione Pop() // valuta l'esito dell'operazione e lo visualizza. Se l'esito e' // positivo visualizza il valore sulla testa dello stack if (pop(stack, &valore) == POS_RESULT) printf("\nPop(): %d\n", valore); else printf(TOP_FAILED); break; case 4: // reset dello stack // chiama la funziona che azzera lo stack stoiReset(stack); break; 34 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_main.c Continua … }; }; case 5: // visualizzazione del contenuto dello stack // chiama la funzione che visualizza il contenuto dello stack stoiVis(*stack); break; case 6: // test di stack vuoto // chiama la funzione che testa se lo stack e’ vuoto e visualizza // il risultato del test if (stoiEmpty(*stack)) printf(EMPTY_STOI); else printf(NOT_EMPTY_STOI); break; case 7: // uscita quit = 1; break; default: // selezione errata printf(WRONG_SELECTION); }; Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 35 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_main.c Programmazione di Calcolatori: gli stack e le liste di variabili strutturate Continua … // Nome della funzione: // main() // Tipo, nome e significato dei parametri della funzione: // alcuno // Descrizione della funzionalita' implementata: // chiamante // Tipo e significato del valore restituito: // alcuno int main() { // definisce il puntatore di accesso allo stack di interi; stoi stack; // inizializza lo stack stoiInit(&stack); // chiama la funzione che implementa il menu di scelta // delle funzionalita' di gestione dello stack di interi stoiMenu(&stack); // recupera la memoria allocata per lo stack stoiReset(&stack); return(0); }; 36 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_const.h // Nome e posizione del file: // Lezione_XXIV/stoi_const.h // Descrizione del contenuto del file: // pseudodichiarazioni per le costanti simboliche utilizzate nella // implementazione del tipo di dato astratto "stack of integer“ // definizione delle costanti simboliche per gli esiti di una operazione #define NEG_RESULT 0 #define POS_RESULT 1 // definizione delle costanti mnemoniche per gli esiti di un test #define TRUE 1 #define FALSE 0 Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 37 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_msg.h // Nome e posizione del file: // Lezione_XXIV/stoi_msg.h // Descrizione del contenuto del file: // pseudodichiarazioni per i messaggi restituiti nella implementazione del // tipo di dato astratto "stack of integer" // definizione delle costanti simboliche per i messaggi utilizzati per il menu #define SELECT_FUN_STOI "\nSelezionare Funzionalita'\n" #define PUSH "\n1: Push()" #define TOP "\n2: Top()" #define POP "\n3: Pop()" #define RESET_LOI "\n4: Azzera lo stack" #define DISPLAY_STOI "\n5: Visualizza lo stack" #define EMPTY_STOI_TEST "\n6: Test di stack vuoto" #define LEAVE_MAN_STOI "\n7: Interrompi" #define SELECT_OP_STOI "\n\nSelezione: " #define WRONG_SELECTION "\nSelezionare 1, 2, 3, 4, 5, 6 o 7" // definizione delle costanti simboliche per i messaggi di descrizione // per l'esito delle operazioni #define ITEM_GEN_FAILED "\nGenerazione del nuovo elemento fallita" #define POP_FAILED "\nPop()fallita: stack vuoto\n" #define TOP_FAILED "\nTop()fallita: stack vuoto\n" // definizione delle costanti simboliche per i messaggi descrittivi dello stack #define EMPTY_STOI "\nStack vuoto\n" #define NOT_EMPTY_STOI "\nStack non vuoto\n" #define STOI "\nStack: Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 38 G. Amodeo, C. Gaibisso Gestione di uno Stack di interi: file stoi_msg.h // definizione delle costanti simboliche per i messaggi per l'esito delle // operazioni #define NEG_RES_MSG "\nOperazione fallita\n" #define POS_RES_MSG "\nOperazione terminata con successo\n" // definizione delle costanti simboliche per i messaggi per l'acquisizione di // dati #define ITEM_VALUE_REQ "\nPush(?): " Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 39 G. Amodeo, C. Gaibisso Grafo delle chiamate stoiInit() ./stoi_ges.c main() ./stoi_main.c stoiReset() ./stoi_ges.c stoiMenu() ./stoi_main.c stoiEmpty() ./stoi_ges.c top() ./stoi_ges.c pop() ./stoi_ges.c stoiVis() ./stoi_ges.c push() ./stoi_ges.c stoiItemIni() ./stoi_uti.c Programmazione di Calcolatori: gli stack e le liste di variabili strutturate 40