FIFO en C Primero en Entrar, primero en salir, Cola o Fila

No es lo mas eficiente, hay muchas cosas se podrian mejorar, en especifico la forma en la que se organizan el arreglo de elementos actuales en la Fila, sin embargo funciono para el proposito. Yo se que la mayoría de estas estructuras ya están implementadas. Pero no se puede decir que eres programador si no sabes implementarlas por tu cuenta. Codigo: /* El tipo de dato se puede cambiar dependiendo de la implementacion que se le quiera dar, tambien se tendrian que cambiar los tipos de datos devueltos por las funciones En este caso yo queria un arreglo de apuntadores char* por lo cual el contenedor es char** */ typedef struct str_queue { char **queue; int len; }Queue; Queue *create_queue(); void free_queue(Queue *q); char *de_queue(Queue *q); void en_queue(Queue *q, char *ptr); Queue *create_queue() { Queue *r = malloc(sizeof(struct str_queue)); r->len = 0; r->queue = NULL; return r; } void free_queue(Queue *q) { if(q) {