programmazione di calcolatori
Download
Skip this Video
Download Presentation
Programmazione di Calcolatori

Loading in 2 Seconds...

play fullscreen
1 / 40

Programmazione di Calcolatori - PowerPoint PPT Presentation


  • 87 Views
  • Uploaded on

Programmazione di Calcolatori. Lezione XXIV: gli stack e le liste di variabili strutturate. Stack di interi e liste di record. Graficamente:. struct stoi_item { ……. struct stoi_item *successivo; };. …. …. …. …. …. stoi *stack. NULL. Stack di interi: definizione dei tipi.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Programmazione di Calcolatori' - mab


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
programmazione di calcolatori

Programmazione di Calcolatori

Lezione XXIV:

gli stack e le

liste di variabili strutturate

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

stack di interi e liste di record
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

stack di interi definizione dei tipi
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

initstack
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

generazione di un nuovo elemento
Generazione di un nuovo elemento
  • La logica:

VALORE

NULL

  • La funzione:

// alloca memoria e inizializza un nuovo elemento dello stack

structstoi_item*stoiItemIni(int valore)

{

// definisce un puntatore per il nuovo elemento dello stack

structstoi_item *new_item;

// alloca memoria per il nuovo elemento

new_item = (structstoi_item *) malloc(sizeof(structstoi_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);

};

struct stoi_item *new_item

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

slide6
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

slide7
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

slide8
Pop()
  • La logica:

(2)

X

X

stoi stack

(3)

NULL

valore

(1)

struct stoi_item *temp

int val

valore

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

slide9
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

slide10
Top()
  • La logica:

valore

stoi *stack

NULL

  • La funzione:

valore

// 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);

};

int val

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi
Gestione di uno Stack di interi
  • Specifiche:
    • implementare una soluzione per il tipo di dato astratto stack di interi che preveda le seguenti operazioni:
    • inizializzazione
    • Push()
    • Top()
    • Pop()
    • visualizzazione del contenuto
    • test di stack vuoto
    • reset

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

organizzazione del codice file e loro contenuto
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 “stackofinteger” (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

organizzazione del codice file e loro contenuto1
Organizzazione del codice: file e loro contenuto
  • Dichiarazioni extern
  • stoi_ges.h: dichiarazioni extern delle funzioni che implementano le operazioni definite sul tipo di dato astratto stoi
  • stoi_uti.h: 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

gestione di uno stack di interi file stoi tipi h
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

gestione di uno stack di interi file stoi ges c
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

gestione di uno stack di interi file stoi ges c1
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

gestione di uno stack di interi file stoi ges c2
Gestione di uno Stack di interi: file stoi_ges.c

// 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);

};

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi ges c3
Gestione di uno Stack di interi: file stoi_ges.c

// 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);

};

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi ges c4
Gestione di uno Stack di interi: file stoi_ges.c

// 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;

};

};

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi ges c5
Gestione di uno Stack di interi: file stoi_ges.c

// 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);

}

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi ges c6
Gestione di uno Stack di interi: file stoi_ges.c

// 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;

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi ges c7
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

gestione di uno stack di interi file stoi ges c8
Gestione di uno Stack di interi: file stoi_ges.c

// 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);

};

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi ges c9
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

gestione di un stack di interi file stoi ges h
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

gestione di uno stack di interi file stoi uti c
Gestione di uno Stack di interi: file stoi_uti.c

// 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>

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi uti c1
Gestione di uno Stack di interi: file stoi_uti.c

// 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;

};

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi uti c2
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

gestione di uno stack di interi file stoi uti h
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

gestione di uno stack di interi file stoi main c
Gestione di uno Stack di interi: file stoi_main.c

// 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>

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi main c1
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

gestione di uno stack di interi file stoi main c2
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

gestione di uno stack di interi file stoi main c3
Gestione di uno Stack di interi: file stoi_main.c
  • // 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;

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi main c4
Gestione di uno Stack di interi: file stoi_main.c
  • 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;

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi main c5
Gestione di uno Stack di interi: file stoi_main.c

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);

};

};

};

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi main c6
Gestione di uno Stack di interi: file stoi_main.c

// 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);

};

Continua …

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

gestione di uno stack di interi file stoi const h
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

gestione di uno stack di interi file stoi msg h
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

gestione di uno stack di interi file stoi msg h1
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

grafo delle chiamate
Grafo delle chiamate

stoiInit()

./stoi_ges.c

main()

./stoi_main.c

stoiReset()

./stoi_ges.c

stoiMenu()

./stoi_main.c

stoiVis()

./stoi_ges.c

push()

./stoi_ges.c

stoiEmpty()

./stoi_ges.c

top()

./stoi_ges.c

pop()

./stoi_ges.c

stoiItemIni()

./stoi_uti.c

Programmazione di Calcolatori: gli stack e le liste di variabili strutturate

ad