/* ------------------------------------------------------------ */ /* IMPLEMENTACION DE FUNCIONES BASICAS UNA COLA FIFO (First Input First Output ) MEDIANTE UNA TABLA Primero en entrar, primero en salir. Funciones: ColaIniciar ( void ) ColaPon ( TipoDato Dato ); ColaSaca ( TipoDato * Dato ); ColaVacia ( void ) ColaVer ( void ) /* ------------------------------------------------------------ */ #include #include #define MAXNUMCOLA 5 // Máximo número de elementos en la cola typedef enum {FALSE=0,TRUE=1} boolean; /* Tipo de dato que almacena cada elemento de la lista */ typedef int TipoDato; TipoDato COLA[ MAXNUMCOLA ]; // Tabla donde guardo los valores en Cola int Iprimero; // Índice al primer elemento int Iultimo; // Índice al ultimo int numelementos; // Número de elementos en cola /* --------------------------------- */ /* Inicializa el puntero de la Cola */ /* --------------------------------- */ void ColaIniciar(void) { Iprimero = 0; Iultimo = 0; numelementos = 0; } /*--------------------------- */ /* Indica si esta o no vacia */ /*--------------------------- */ boolean ColaVacia(void) { return ( numelementos == 0)?TRUE:FALSE; } /* ------------------------------------------- */ /* Pone un nuevo elemento al final de la Cola */ /* ------------------------------------------- */ boolean ColaPon ( TipoDato Dato) { boolean resu; resu = FALSE; if ( numelementos < MAXNUMCOLA ) { numelementos ++; COLA [ Iultimo ] = Dato; Iultimo ++; Iultimo = ( Iultimo % MAXNUMCOLA ); resu = TRUE; } return resu; } /*-------------------------------------*/ /* Saca el primer elemento de la Cola */ /*-------------------------------------*/ boolean ColaSaca( TipoDato *pdato) { if ( ColaVacia() ) { return FALSE; } else { *pdato = COLA[Iprimero]; Iprimero++ ; numelementos-- ; Iprimero = Iprimero % MAXNUMCOLA; return TRUE; } } /* ---------------------------------- */ /* Muestra el contenido de la cola */ /* ---------------------------------- */ void ColaVer ( void ) { int i; // Contador int pos; // Nº de elementos en la tabla printf("\n COLA: ["); pos = Iprimero; for (i=0;i < numelementos ; i++) { printf("->%d ", COLA[pos]); pos++; pos = pos % MAXNUMCOLA; } printf("]\n"); } /* Prueba de Funciones */ void main() { TipoDato dato; ColaIniciar(); if ( ColaVacia () ) puts ("Cola vacia"); // Introduzco valores en la pila ColaPon(60); ColaVer() ; ColaPon(50); ColaVer() ; ColaPon(40); ColaVer() ; ColaPon(30); ColaVer() ; ColaPon(20); ColaVer() ; ColaPon(10); ColaVer() ; puts( " Saco uno y pongo un uno "); getchar(); ColaSaca( & dato ); ColaPon(1); ColaVer(); // Extraigo valores de la pila while ( ! ColaVacia() ) { ColaSaca( & dato); printf(" Valor extraido = %d \n ", dato); ColaVer(); } getchar(); }