Aula-hashing
#include
#define TAM 10
//estrutura para listas duplamente encadeadas typedef struct cel { int conteudo; struct cel *ant, *prox;
} Celula;
/** Metodo que adiciona elementos na lista duplamente encadeada controlando a duplicidade e ordem */
Celula *inserir (int valor, Celula *lista){ Celula *nova; nova=(Celula*) malloc(sizeof(Celula)); nova->conteudo=valor; if (!lista){ //1ª VEZ lista=nova; nova->ant=NULL; //lista->ant=NULL; nova->prox=NULL; //lista->prox=NULL; } else { //GARANTIR QUE A LISTA ESTà NO INíCIO while (lista->ant) lista=lista->ant; if (valorconteudo){ //o valor sera o 1º da lista lista->ant=nova; nova->prox=lista; nova->ant=NULL; } else{ //--------------------------------------// while ((lista->prox)&&(valor>lista->conteudo)) //DEPOIS DO && PARA CONTROLAR ORDEM! [1,2,3,4...] lista=lista->prox; //VERIFICAR PQ SAIR DA REPETIÇÃO if (valor==lista->conteudo) printf ("Dado jah cadastrado!\n"); //CONTROLA DUPLICIDADE else if (valorconteudo){ lista->ant->prox=nova; nova->ant=lista->ant; nova->prox=lista; lista->ant=nova; } else { nova->prox=NULL; nova->ant=lista; lista->prox=nova; } } } return lista;
}
/* funcao que recebe um valor inteiro e uma lista duplamente encadeada * e remove da lista a primeira celula que contiver valor, * caso a celula existir. Ao final, a lista alterada eh retornada */
Celula *remover(int valor, Celula *lista) { Celula *pAux;
while (lista->ant) lista = lista->ant;
pAux = lista; while (pAux != NULL && pAux->conteudo != valor) pAux = pAux->prox;
if (pAux != NULL){ //unico elemento na lista if (pAux->ant == NULL &&