/* ------------------------------------------------------------ */ /* IMPLEMENTACION DE FUNCIONES BASICAS UNA COLA FIFO (First Input First Output ) Primero en entrar, primero en salir. Funciones: ColaIniciar ( void ) ColaPon ( TipoDato Dato ); ColaSaca ( TipoDato * Dato ); ColaVacia ( void ) ColaVer ( void ) * ------------------------------------------------------------ */ /* IMPLEMENTACION DE FUNCIONES BASICAS UNA COLa */ /* ------------------------------------------------------------ */ #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; /* Variable global Puntero de Inicio de la Lista */ Elemento *Base; /* --------------------------------- */ /* Inicializa el puntero de la Cola */ /* --------------------------------- */ void ColaIniciar(void) { Base = NULL; } /*--------------------------- */ /* Indica si esta o no vacia */ /*--------------------------- */ boolean ColaVacia(void) { return ( Base == NULL)?TRUE:FALSE; } /* ------------------------------------------- */ /* Pone un nuevo elemento al final de la Cola */ /* ------------------------------------------- */ boolean ColaPon ( TipoDato Dato) { Elemento *paux,*pnuevo; /* Creo el elemento nuevo */ pnuevo = malloc( sizeof(Elemento)); if ( pnuevo == NULL ) { /* Si no pude crear el elemento termina la función */ return FALSE; } /* Relleno el nuevo elemento */ pnuevo->valor = Dato; pnuevo->sig = NULL; /* Va a ser el último */ /* Si no está vacia recorro la lista hasta alcanzar el último elemento */ if ( Base != NULL ) { paux = Base; while ( paux->sig != NULL ) { paux = paux->sig; } /* El puntero siguiente del último elemento señala al nuevo */ paux->sig = pnuevo; } else { /* La lista está vacia */ /* Base señala al nuevo elemento */ Base = pnuevo; } return TRUE; } /*-------------------------------------*/ /* Saca el primer elemento de la Cola */ /*-------------------------------------*/ boolean ColaSaca( TipoDato *pdato) { Elemento *paux; if ( ColaVacia() ) { return FALSE; } else { paux = Base; Base = Base->sig; *pdato = paux->valor; free(paux); return TRUE; } } /* ---------------------------------- */ /* Muestra el contenido de la cola */ /* ---------------------------------- */ void ColaVer ( void ) { Elemento *paux; printf("\n COLA: ["); paux = Base; while ( paux != NULL ) { printf("->%d ",paux->valor); paux = paux->sig; } printf("]\n"); } /* Prueba de Funciones */ void main() { TipoDato dato; ColaIniciar(); if ( ColaVacia () ) puts ("Cola vacia"); // Introduzco valores en la pila ColaPon(30); ColaVer() ; ColaPon(20); ColaVer() ; ColaPon(10); ColaVer() ; getchar(); // Extraigo valores de la pila while ( ! ColaVacia() ) { ColaSaca( & dato); printf(" Valor extraido = %d \n ", dato); ColaVer(); } getchar(); }