Baixe o app para aproveitar ainda mais
Prévia do material em texto
Lista Linear Simplesmente Encadeada Exemplo 2 – Lista não ordenada e sem elementos repetidos #include <stdio.h> typedef struct no { int valor; struct no * prox; } TNo; void inserirInicio (TNo* *lista, int num); void listar (TNo * lista); void remover (TNo* *lista, int n); void removerTodos (TNo* *list); TNo* buscar (TNo *lista, int n) ; void alterar (TNo *lista, int num); int main () { TNo * LSE = NULL; char op; int numero; do { printf ("1 - Inserir no inicio da lista \n"); printf ("2 - Remover elemento procurado\n"); printf ("3 - Alterar valor \n"); printf ("4 - Exibir todos da lista \n"); printf ("5 - Sair do programa \n"); printf ("Informe a opcao: "); op = getchar (); fflush (stdin); switch (op) { case '1': printf ("Informe o valor: "); scanf ("%i", &numero); fflush (stdin); inserirInicio (&LSE,numero); break; case '2': printf ("Informe o valor a remover: "); scanf ("%i", &numero); fflush (stdin); remover (&LSE, numero); break; case '3': printf ("Informe o valor: "); scanf ("%i", &numero); fflush (stdin); alterar (LSE,numero); break; case '4': listar (LSE); break; case '5': removerTodos (&LSE); break; default: printf ("Opcao invalida \n"); } } while (op != '5'); return 0; } � void inserirInicio (TNo* *lista, int num){ // Inserir no inicio da lista. Nao permite repetidos. TNo * novo; int achou; achou = buscar (*lista,num); if (achou == 1) printf ("Insercao nao efetuada. Elemento repetido. \n"); else { novo = (TNo *) malloc (sizeof(TNo)); novo->valor = num; if (*lista == NULL) { *lista = novo; novo->prox = NULL; } else { novo->prox = *lista; *lista = novo; } } } void listar (TNo * lista) { // exibir todos os elementos da lista TNo * aux; if (lista == NULL) printf ("Lista vazia \n"); else { aux = lista; while (aux != NULL) { printf ("%i \n", aux->valor); aux = aux->prox; } } } void alterar (TNo *lista, int num) { TNo * aux; aux = buscar(lista, num); if (aux == NULL) printf ("Elemento nao encontrado \n"); else { printf ("Informe o novo valor: "); scanf ("%i", aux->valor); printf ("Alteracao efetuada \n"); } } � void remover (TNo* *lista, int n) { // remover utilizando busca sequencial simples TNo * aux1, *aux2; int achou = 0; if (*lista == NULL) printf ("Lista vazia \n"); else if ((*lista)->valor == n) { // remover primeiro aux1 = *lista; *lista = (*lista)->prox; free (aux1); } else { aux1 = *lista; aux2 = aux1->prox; while (aux2 != NULL) { if (aux2->valor == n) { achou = 1; break; } else { aux1 = aux1->prox; aux2 = aux2->prox; } } if (achou == 1) { aux1->prox = aux2->prox; free (aux2); printf ("Elemento removido \n"); } else printf ("Elemento nao encontrado \n"); } } TNo* buscar (TNo *lista, int n) { // busca sequencial simples TNo * aux; if (lista == NULL) return NULL; else { aux = lista; while (aux != NULL) { if (aux->valor == n) return aux; aux = aux->prox; } return NULL; } } � void removerTodos (TNo* *list) { TNo * aux; while (*list != NULL) { aux = *list; *list = (*list)->prox; free(aux); } }
Compartilhar