Lista encadeada implementada em c
#include "lista.h"
#include
#include
#include
#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
//criar uma lista struct Lista * criaLista(){ struct Lista * lista;
lista = (struct Lista*) malloc(sizeof (struct Lista)); lista->primeiro = NULL; lista->comprimento = 0;
return lista;
}
//cria nodo (auxiliar de adicionaItem) struct Nodo * criaNodo(struct Registro * dados){ struct Nodo * nodo; nodo = (struct Nodo*) malloc(sizeof (struct Nodo));
if(nodo == NULL) return NULL;
nodo -> dados = dados; nodo -> proximo = NULL; return nodo;
}
//adiciona no inicio da lista int adicionaItem(struct Lista * lista, struct Registro * dados){ struct Nodo * nodo;
if(lista == NULL) return 0;
nodo = criaNodo(dados); if( nodo == NULL) return 0;
nodo->proximo = lista -> primeiro; lista->primeiro = nodo;
lista->comprimento++;
return 1;
}
//adiciona no final da lista int adicionaItemNoFim(struct Lista * lista, struct Registro * dados){ struct Nodo * nodo; struct Nodo * fim; //ponteiro para percorrer a lista. if(lista == NULL) return 0;
nodo = criaNodo(dados); if( nodo == NULL) return 0;
if(lista->comprimento == 0){ return adicionaItem(lista, dados); }
nodo = criaNodo(dados); fim = lista->primeiro; while(fim->proximo != NULL) { fim = fim->proximo; } fim->proximo = nodo; lista->comprimento ++;
return 1;
}
struct Nodo * nodoNaPosicao(struct Lista * lista, int posicao){ struct Nodo * p; p=lista->primeiro; if ((posicao < 0) || (posicao >= lista->comprimento)) return NULL;
while (posicao>0) { p = p->proximo; posicao--; } return p;
}
int adicionaItemNaPosicao(struct Lista * lista, struct Registro * dados, int posicao){ struct Nodo * nodo; struct Nodo * p;
if(posicao>0) { p=nodoNaPosicao(lista, posicao-1); if (p == NULL)