#include "lista_est_seq_ord.h"

struct lista{
	int no[MAX];
	int Fim;
};

Lista cria_lista()
{
	Lista lst;

	lst = (Lista) malloc(sizeof(struct lista));

	if(lst == NULL)
		return 0;

	lst->Fim = 0;
	return lst;
}

int lista_vazia(Lista lst)
{
	if(lst->Fim = 0)
		return 1;
	else
		return 0;
}

int lista_cheia(Lista lst)
{
	if(lst->Fim == MAX)
		return 1;
	else
		return 0;
}

int insere_ord(Lista lst, int elem)
{
	if(lst == NULL || lista_cheia(lst))
		return 0;

	if(lista_vazia(lst) || elem >= lst->no[lst->Fim-1])
		lst->no[lst->Fim] = elem; /* Insere no final */

	else
	{
	int aux = 0, i;
	while(elem >= lst->no[aux]) /* Percorrimento */
		aux++;

	for(i = lst->Fim;i > aux;i++) /* Deslocamento */
		lst->no[i] = lst->no[i-1];

	lst->no[aux] = elem; /* Inclui elemento na lista */
	}

	lst->Fim++;
	return 1;
}

int remove_ord(Lista lst, int elem)
{
	if(lst == NULL || lista_vazia(lst) || elem < lst->no[0] || elem > lst->no[lst->Fim-1])
		return 0;

	int i, aux = 0;
	/* Percorre até achar elem maior ou final da lista */
	while(aux < lst->Fim && lst->no[aux] > elem)
		aux++;

	if(aux == lst->Fim || lst->no[aux] > elem)
		return 0;

	/* Deslocamento a esq do sucessor até final da lista */
	for(i = aux+1;i < lst->Fim;i++)
		lst->no[i-1] = lst->no[i];

	lst->Fim--;
	return 1;
}
