/* * Fila_ligada_circular: implementação ligada de filas utilizando * lista circular e apontador para o último elemento da fila. */ #include "fila_ligada_circular.h" #include #include /* Inicia uma instância do tipo fila */ void cria_fila(Fila* ap_fila) { *ap_fila = NULL; } /* Verifica se a fila está vazia */ int fila_vazia(Fila* ap_fila) { return *ap_fila == 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; if (*ap_fila == NULL) { *ap_fila = p; p->prox = p; } else { p->prox = (*ap_fila)->prox; (*ap_fila)->prox = p; *ap_fila = p; } } /* Remove um elemento da fila */ int remove_fila(Fila* ap_fila) { if (*ap_fila == NULL) { printf ("Erro: Fila vazia!\n"); exit(1); } else { No_fila* r = (*ap_fila)->prox; int v = r->v; if (*ap_fila == (*ap_fila)->prox) *ap_fila = NULL; else (*ap_fila)->prox = (*ap_fila)->prox->prox; free(r); return v; } } /* Descarta todos os elementos da fila */ void libera_fila(Fila* ap_fila) { if (*ap_fila != NULL) { No_fila* p = *ap_fila; do { No_fila* q = p; p = p->prox; free(q); } while (p != *ap_fila); } }