/* ------------------------------------------------------------ */ /* IMPLEMENTACION DE FUNCIONES BASICAS UNA PILA LIFO (Least Input First Output ) Último en entrar, primero en salir. Funciones: PilaIniciar ( void ) PilaPon ( TipoDato Dato ); PilaSaca ( TipoDato * Dato ); PilaVacia ( void ) PilaVer ( void ) * ------------------------------------------------------------ */ #include #include typedef enum {FALSE=0,TRUE=1} boolean; /* Tipo de dato que almacena cada elemento de la lista */ typedef int TipoDato; /* Estructura autoreferenciada */ struct SEle{ TipoDato valor; struct SEle *sig; }; typedef struct SEle Elemento; Elemento *Base; /*----------------------------------------------------------------*/ /* Inicializa el puntero de la Lista */ void PilaIniciar(void) { Base = NULL; } /* -------------------------- */ /* Indica si está o no vacia */ /* -------------------------- */ boolean PilaVacia(void) { return ( Base == NULL)?TRUE:FALSE; } /*------------------------------- */ /* Pone un elemento en la pila */ /*------------------------------- */ boolean PilaPon ( TipoDato Dato) { Elemento *pnuevo; boolean resu; resu = FALSE; pnuevo = malloc( sizeof(Elemento) ); if ( pnuevo != NULL ) { pnuevo->sig = Base; pnuevo->valor = Dato; Base = pnuevo; resu = TRUE; } return resu; } /*-------------------------------- */ /* Extrae un elemento de la Pila */ /*------------------------------- */ boolean PilaSaca( TipoDato *pdato) { Elemento *paux; if ( PilaVacia() ) { return FALSE; } else { paux = Base; Base = Base->sig; *pdato = paux->valor; free(paux); return TRUE; } } /*---------------------------------- */ /* Muestra el contenido de la Pila */ void PilaVer ( void ) { Elemento *paux; printf("\n PILA: ["); paux = Base; while ( paux != NULL ) { printf("->%d ",paux->valor); paux = paux->sig; } printf("]\n"); } /* Prueba de Funciones */ void main() { TipoDato dato; PilaIniciar(); if ( PilaVacia () ) puts ("Pila vacia"); // Introduzco valores en la pila PilaPon(30); PilaVer() ; PilaPon(20); PilaVer() ; PilaPon(10); PilaVer() ; getchar(); // Extraigo valores de la pila while ( ! PilaVacia() ) { PilaSaca( & dato); printf(" Valor extraido = %d \n ", dato); PilaVer(); } getchar(); }