#include "fila_est.h"

struct fila {
    int vetor[MAX];
    int contador, inicio;
}

Fila cria_lista()
{
    Fila fi = (Fila) malloc(sizeof(struct fila));
    if(fi != NULL)
    {
        fi->inicio = 0;
        fi->contador = 0;
    }
    return fi;
}

int fila_vazia(Fila f)
{
    if(f->contador == 0)
        return 1;
    return 0;
}

int fila_cheia(Fila f)
{
    if(f->contador == MAX)
        return 1;
    return 0;
}

int insere_fim(Fila f, int elem)
{
    if(fila_cheia(f))
        return 0;
    /* Insere elemento no final */
    f->vetor[(f->inicio + f->contador) % MAX] = elem;
    f->contador++;  /* Incremento normal */
    return 1;
}

int remove_inicio(Fila f, int *elem)
{
    if(fila_vazia(f))
        return 0;

    *elem = f->vetor[f->inicio];
    f->inicio = (f->inicio + 1) % MAX; /* Incremento circular */
    f->contador++; /* Decremento não circular */
}
