/* * Fila_inicio_fim: implementação ligada de filas utilizando * apontadores para o início e o final da fila. * * Observação: o campo final só é válido se a fila tiver pelo menos * um elemento. */ #include #include #include "fila_inicio_fim.h" /* Inicia uma instância do tipo fila */ void cria_fila(Fila* ap_fila) { ap_fila->inicio = NULL; } /* Verifica se a fila está vazia */ int fila_vazia(Fila* ap_fila) { return ap_fila->inicio == NULL; } /* Insere um elemento na fila */ void insere_fila(Fila* ap_fila, int v) { No_fila* p = (No_fila*) malloc(sizeof(No_fila)); p->v = v; p->prox = NULL; if (fila_vazia(ap_fila)) ap_fila->inicio = p; else ap_fila->fim->prox = p; ap_fila->fim = p; } /* Remove um elemento da fila */ int remove_fila(Fila* ap_fila) { if (fila_vazia(ap_fila)) { printf ("Erro: Fila vazia!\n"); exit(1); } else { No_fila* p = ap_fila->inicio; int v = p->v; ap_fila->inicio = ap_fila->inicio->prox; free(p); return v; } } /* Descarta todos os elementos da fila */ void libera_fila(Fila* ap_fila) { No_fila* p = ap_fila->inicio; while (p != NULL) { No_fila* q = p; p = p->prox; free(q); } }