- #include <stdio.h> 
- #include <stdlib.h> 
- #include <string.h> 
- #include <assert.h> 
-   
- #define FALSE 0 
- #define TRUE !FALSE 
-   
- typedef char boolean; 
- //Cola propiamente dicha 
- typedef struct{ 
-     void *elementos; 
-     int size; 
-     int head,   //Cantidad de puts(); 
-         tail;   //Cantidad de Gets(); 
- }cola_t; 
- //Estructura Administrativa 
- typedef struct{ 
-     cola_t *cola; 
-     int sizeTipo; 
- }queue_t; 
-   
- queue_t *qCreate(int size, int sizeTipo){ 
-     queue_t  *- queue  = (- queue_t  *)malloc(sizeof(- queue_t ));
-      
-     queue ->- cola  = (- cola_t  *)malloc(sizeof(- cola_t ));
-     queue->sizeTipo = sizeTipo;  
-      
-     queue ->- cola ->- elementos  = (void *)malloc(- sizeTipo  *-  size );
-     assert(- queue ->- cola ->- elementos );
 
-      
-     queue->cola->size = size; 
-     queue->cola->head = queue->cola->tail = 0; 
-      
-     return queue; 
- } 
- void qDestroy(queue_t *queue){ 
- }    
- int qFull(queue_t *queue){ 
-     if(queue && queue->cola)    //Si tengo queue 
-         return ((queue->cola->tail - queue->cola->head) == queue->cola->size); 
-     return -1;  //No hay cola, devuelvo -1 
- } 
- int qEmpty(queue_t *queue){ 
-     if(queue && queue->cola)    //si tengo queue 
-         return (queue->cola->tail == queue->cola->head); 
-     return -1; //No hay cola     
- } 
- boolean qPut(queue_t *queue, void *valor){ 
-     if(qFull(queue)) 
-         return FALSE;   //Esta llena y no puedo ingresar nada 
-      
-     memcpy( ((char *)(- queue ->- cola ->- elementos ))+(- queue ->- cola ->- tail  %-  queue ->- cola ->- size ),-  valor ,-  queue ->- sizeTipo );
 
-     valor = (void *)valor; 
-      
-     printf("Guardado: %dn",*( ((char*)(- queue ->- cola ->- elementos ))+(- queue ->- cola ->- tail )) );
 
-     //printf("  ingresado en: %dn",queue->cola->tail % queue->cola->size); 
-      
-     queue->cola->tail++; 
-     return TRUE; 
- } 
- boolean qGet(queue_t *queue, void *valor){ 
-     if(qEmpty(queue)) 
-         return FALSE;   //Esta vacia y no puedo ingresar nada 
-     /*  
-      * Resuelvo el problema de q los 
-      * indices crezcan hacia el infinito  
-      */ 
-     if(queue->cola->head > queue->cola->size){ 
-         queue->cola->head %= queue->cola->size; 
-         queue->cola->tail %= queue->cola->size; 
-     } 
-      
-     memcpy(- valor ,((char *)(- queue ->- cola ->- elementos ))+(- queue ->- cola ->- head  %-  queue ->- cola ->- size ),-  queue ->- sizeTipo );
 
-      
-     printf("Removido: %dn",*((char *)(- queue ->- cola ->- elementos ))+(- queue ->- cola ->- head  %-  queue ->- cola ->- size ));
 
-     //printf("en exa: %0xn",valor); 
-     //printf("  removido de: %dn",queue->cola->head % queue->cola->size); 
-      
-     queue->cola->head++; 
-     return TRUE; 
- } 
-   
-   
- int main(void){ 
-     queue_t *queue; 
-     int a = 15, b = 22, c,d; 
-   
-     queue = qCreate(5,sizeof(int)); 
-      
-     qPut (queue,(void *)&a); 
-     qPut (queue,(void *)&b); 
-      
-      
-     qGet(queue,(void *)&c);  
-     qGet(queue,(void *)&d); 
-      
-      
-     printf("El primer valor que extraje fue : %dn",- c );
 
-     printf("Ese mismo valor mostrado antes pero casteado a (char) : %dn",(char)- c );
 
-      
-     printf("el segundo valor que extraje fue: %dn",- d );
 
-      
-      
-     qDestroy(queue); 
-      
-      
-     return 0; 
- } 
-   
-