Lista Encadeada Dinâmica em C: Implementação Completa
Classificado em Grego
Escrito em em
português com um tamanho de 2,31 KB
Desafio: Crie um programa capaz de armazenar dados em uma estrutura de dados do tipo lista encadeada dinâmica.
Código-Fonte em C
#include <stdio.h>
#include <stdlib.h>
typedef struct no {
int valor;
struct no *prox;
} lista;
lista *p, *q = NULL, *inicio = NULL;
void remover(int n) {
p = inicio;
q = NULL;
int achou = 0;
while ((p != NULL) && (achou == 0)) {
if (p->valor != n) { // avança para o próximo
q = p;
p = p->prox;
} else { // encontrou o valor
if (q == NULL) { // é o primeiro nó
inicio = p->prox;
free(p);
} else { // nó do meio ou final
q->prox = p->prox;
free(p);
}
achou = 1;
}
}
}
void exibir() {
p = inicio;
while (p != NULL) {
printf("%d | ", p->valor);
p = p->prox;
}
}
void consultar() {
int v;
printf("\nDigite o valor para consulta: ");
scanf("%d", &v);
int achou = 0;
p = inicio;
while (p != NULL && achou == 0) {
if (p->valor == v) {
printf("Valor encontrado: %d", p->valor);
achou = 1;
}
p = p->prox;
}
}
void inserir() {
int v;
printf("\nDigite o valor: ");
scanf("%d", &v);
p = (lista*) malloc(sizeof(lista));
p->valor = v;
p->prox = NULL;
if (inicio == NULL)
inicio = p;
if (q != NULL)
q->prox = p;
q = p;
}
int main() {
int op;
do {
printf("\n*** Menu de Opções ***");
printf("\n1- Inserir Valor");
printf("\n2- Consultar Valor");
printf("\n3- Exibir Lista");
printf("\n4- Remover Valor");
printf("\n5- SAIR");
printf("\nDigite a sua opção: ");
scanf("%d", &op);
switch (op) {
case 1: inserir(); break;
case 2: consultar(); break;
case 3: exibir(); break;
case 4: {
int v;
printf("\nDigite o valor a ser removido: ");
scanf("%d", &v);
remover(v);
break;
}
}
} while (op != 5);
return 0;
}