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

struct No
{
	int valor;
	struct No *prox;
};

void inserir(struct No **f, int v);
void imprimir(struct No *f);
int remover(struct No **f);
int vazia(struct No *f);

int main()
{
	struct No *fila = NULL;
	inserir(&fila, 5);
	imprimir(fila);
	inserir(&fila, 7);
	imprimir(fila);
	inserir(&fila, 9);
	imprimir(fila);
	inserir(&fila, 2);
	imprimir(fila);
	if (!vazia(fila))
		printf("Elemento removido: %i\n", remover(&fila));
	imprimir(fila);
	if (!vazia(fila))
		printf("Elemento removido: %i\n", remover(&fila));
	imprimir(fila);
	if (!vazia(fila))
		printf("Elemento removido: %i\n", remover(&fila));
	imprimir(fila);
	if (!vazia(fila))
		printf("Elemento removido: %i\n", remover(&fila));
	imprimir(fila);
	if (!vazia(fila))
	printf("Elemento removido: %i\n", remover(&fila));
	imprimir(fila);
	printf("Fim do programa...\n\n");
	system("pause");
	return 0;
}


void inserir(struct No **f, int v)
{
	struct No *aux1 = (struct No *) malloc(sizeof(struct No)), *aux2;
	aux1->valor = v;
	aux1->prox = NULL;
	if (*f == NULL)
	{
		*f = aux1;
	}
	else
	{
		aux2 = *f;
		while (aux2->prox != NULL)
			aux2 = aux2->prox;
		aux2->prox = aux1;
	}
}

void imprimir(struct No *f)
{
	printf("{");
	while (f != NULL)
	{
		printf("%i ", f->valor);
		f = f->prox;
	}
	printf("}\n");
}

int remover(struct No **f)
{
	struct No *aux;
	int resp;
	if (*f == NULL)
	{
		printf("Erro! Fila vazia!\n");
		system("pause");
		exit(1);
	}
	aux = *f;
	resp = aux->valor;
	*f = aux->prox;
	free(aux);
	return resp;
}

int vazia(struct No *f)
{
	return f == NULL;
}
