/*
 * Fila_inicio_fim: implementação ligada de filas utilizando
 * apontadores para o início e o final da fila.
 */

#ifndef FILA_INICIO_FIM
#define FILA_INICIO_FIM

typedef struct No_fila {
  int v;
  struct No_fila* prox;
} No_fila;

struct Fila_t {
  No_fila* inicio;
  No_fila* fim;
};

typedef struct Fila_t Fila;

/* Inicia uma instância do tipo fila */
void cria_fila(Fila* ap_fila);

/* Verifica se a fila está vazia */
int fila_vazia(Fila* ap_fila);

/* Insere um elemento na fila */
void insere_fila(Fila* ap_fila, int v);

/* Remove um elemento da fila */
int remove_fila(Fila* ap_fila);

/* Descarta todos os elementos da fila */
void libera_fila(Fila* ap_fila);

#endif