/* File: pileseq.c */ /* Time-stamp: "2002-05-17 00:24:57 calvanes" */ /* Scopo: rappresentazione sequenziale delle pile tramite array statico */ /* Richiede di dichiarare il tipo bool */ /* typedef int bool; */ /* Richiede di dichiarare la dimensione massima della pila */ /* #define MaxPila 10 */ /* Richiede di dichiarare il tipo degli elementi della pila */ /* typedef int TipoElemPila; */ /* definizione del tipo pila */ struct tipoPila { TipoElemPila pila[MaxPila]; int pos; }; typedef struct tipoPila TipoPila; /* implementazione delle operazioni primitive sulle pile */ void InitPila(TipoPila *pp) /* Inizializza la pila *pp ponendo a -1 l'indice dell'elemento affiorante della pila. */ { (*pp).pos = -1; } /* InitPila */ bool TestPilaVuota(TipoPila p) /* Restituisce TRUE se la pila p e` vuota, FALSE altrimenti. */ { return (p.pos == -1); } /* TestPilaVuota */ void TopPila(TipoPila p, TipoElemPila *pv) /* Restituisce in *pv l'elemento affiorante della pila p, senza modificare la pila. */ { if (TestPilaVuota(p)) printf("ERRORE: PILA VUOTA\n"); else *pv = p.pila[p.pos]; } /* TopPila */ bool TestPilaPiena(TipoPila p) /* Restituisce TRUE se la pila p e` piena, FALSE altrimenti. */ { return (p.pos == (MaxPila - 1)); } /* TestPilaPiena */ void Push(TipoPila *pp, TipoElemPila v) /* Inserisce l'elemento v in cima alla pila *pp. */ { if (TestPilaPiena(*pp)) printf("ERRORE: PILA PIENA\n"); else { (*pp).pos++; (*pp).pila[(*pp).pos] = v; } } /* Push */ void Pop(TipoPila *pp, TipoElemPila *pv) /* Elimina l'elemento affiorante della pila *pp, restituendone il valore in *pv. */ { if (TestPilaVuota(*pp)) printf("ERRORE: PILA VUOTA\n"); else { *pv = (*pp).pila[(*pp).pos]; (*pp).pos--; } } /* Pop */