#include "lista.h"

struct lista{
	int info;
	struct lista *prox;
};

Lista cria_lista()
{
	Lista C = (Lista) malloc(sizeof(struct lista));
	if(C == NULL)
        return NULL;

	C->info = 0;
	C->prox = NULL;
	return C;
}

int lista_vazia(Lista l)
{
	if(l->info == 0)
        return 1;
	return 0;
}

int insere_elem(Lista l, int elem)
{
	if(l == NULL)
        return 0;

	Lista cabecalho = l;
	Lista temp_aux = (Lista) malloc(sizeof(struct lista));
	temp_aux->info = elem;
	temp_aux->prox = cabecalho->prox;
	cabecalho->prox = temp_aux;
	cabecalho->info++;
	return 1;
}

int remove_elem(Lista l, int elem)
{
	if(lista_vazia(l))
        return 0;
	Lista temp = l;
	if(elem == l->info)
    {
		l = temp->prox;
		free(temp);
		return 1;
	}

	while(temp->prox != NULL && temp->prox->info != elem)
        temp = temp->prox;

	if(temp->prox == NULL)
        return 0;
	Lista temp_aux = temp->prox;
	temp->prox = temp_aux->prox;
	free(temp_aux);
	return 1;
}

int tamanho(Lista l)
{
	if(lista_vazia(l))
        return 0;
	int i = 0;
	while(l != NULL)
    {
		i++;
		l = l->prox;
	}
	return i;
}
void imprimi_lista(Lista l)
{
	Lista temp;
	temp = l;
	printf("Lista = {");
	while(temp->prox != NULL)
    {
		if(temp->prox->prox != NULL)
            printf("%d ",temp->prox->info);
		else
            printf("%d",temp->prox->info);
		temp = temp->prox;
	}
	printf("}\n");
}

void imprimi_tamanho(Lista L)
{
	printf("Tamanho = %d\n",tamanho(L));
}

