#include #include struct no { int v; struct no* prox; }; typedef struct no No; struct fila { No* inicio; No* fim; }; typedef struct fila Fila; void imprime_fila(Fila f) { No* l = f.inicio; printf("("); if (l != NULL) { printf("%d", l->v); l = l->prox; } while (l != NULL) { printf(", %d", l->v); l = l->prox; } printf(")\n"); } void inicia_fila (Fila *ap_f) { ap_f->inicio = ap_f->fim = NULL; } void insere_fila(Fila *ap_f, int v) { No *n; n = (No*) malloc(sizeof(No)); n->v = v; n->prox = NULL; /* Ultimo elemento da fila */ if (ap_f->inicio == NULL) ap_f->inicio = ap_f->fim = n; else { ap_f->fim->prox = n; ap_f->fim = n; } } /* Retorna o valor do elemento removido ou -1 caso a fila esteja vazia. */ int remove_fila(Fila *f) { No* n; int v; if (f->inicio == NULL) return -1; n = f->inicio; f->inicio = n->prox; if (f->inicio == NULL) f->fim = NULL; v = n->v; free(n); return v; } int main() { Fila f; inicia_fila(&f); insere_fila(&f, 1); insere_fila(&f, 3); insere_fila(&f, 5); imprime_fila(f); while (remove_fila(&f) != -1) imprime_fila(f); return 0; }