Programa lista ligada- estrutura de dados
#include
struct lista { int info; struct lista* prox;
};
typedef struct lista Lista;
/* função de inicialização: retorna a lista vazia */
Lista* inicializa (void)
{
return NULL;
}
/* inserção no inicio: retorna a lista atualizada */
Lista* insere (Lista* l, int i )
{
Lista* novo= (Lista*) malloc (sizeof (Lista)); novo->info=i ; novo->prox=l; return novo;
}
/* função imprime: imprime os valores dos elementos */ void imprime(Lista* l)
{
Lista* p; /* variavel auxiliar pra percorrer a lista */ for(p = l; p != NULL; p = p->prox) printf("info= %d\n", p-> info);
}
/* função vazia: retorna 1 se vazia ou 0 se não vazia */ int vazia (Lista* l )
{
if (l==NULL) return 1; else return 0;
}
/* função busca: busca um elemento na lista */
Lista* busca (Lista* l,int v)
{
Lista* p ; for (p=l; p !=NULL; p=p->prox) if(p->info==v) return p; return NULL; /* não achou o elemento */
}
/* função retira: retira elemento da lista */
Lista* retira(Lista* l, int v ){ Lista* ant= NULL; /* ponteiro para elemento anterior */ Lista* p = l; /* ponteiro para percorrer a lista */ /* procura elemento na lista, guardando anterios */ while (p != NULL && p-> info != v){ ant=p; p= p -> prox; }
/* verifica se achou elemento */ if (p == NULL) return l; /* NÃO ACHOU: retorna lista original */ /* retira elemento */ if (ant== NULL) { /*retira o elemento do inicio */ l=p -> prox;} else{ /* retira elemento do meio da lista */ ant-> prox = p->prox; }
free (p); return l;
}
void libera (Lista* l)
{
Lista* p =l; while(p !=NULL){ Lista* t = p-> prox;