#include <stdio.h>
#include <stdlib.h>

struct no {
    int dado;
    struct no *prox;
};

typedef struct no criano;
typedef criano *no_pont;
int tam;

//void cria_Fila(no_pont *head, no_pont *tail);
int fila_Vazia(no_pont head);
void insere_Fila(no_pont *head, no_pont *tail, int valor);
int retira_Fila(no_pont *head, no_pont *tail);
void imprime_Fila(no_pont atual);

int main() {
    no_pont head=NULL;
    no_pont tail=NULL;
    insere_Fila(&head, &tail, 52);
    insere_Fila(&head, &tail, 21);
    insere_Fila(&head, &tail, 532);
    imprime_Fila(head);

    return 0;
}

int fila_Vazia(no_pont head) {
    return head==NULL;
}

void insere_Fila(no_pont *head, no_pont *tail, int valor) {
    no_pont novo;
    novo = (no_pont)malloc(sizeof(criano));

    if(novo!=NULL) {
        novo->dado=valor;
        novo->prox=NULL;

        if(fila_Vazia(*head)) {
            *head=novo;
        } else {
            (*tail)->prox=novo;
        }

        *tail = novo;
    } else {
        printf("%d nao inserido. Nao ha espaco na memoria\n",valor);
    }
    tam++;
}

void imprime_Fila(no_pont atual) {
    if(atual == NULL) {
        printf("A fila esta vazia\n");
    } else {
        printf("A fila e: ");

        while(atual!=NULL) {
            printf("%d  ",atual->dado);
            atual=atual->prox;
        }

        printf("NULL\n\n");
    }
}
