Implementação de Lista Encadeada Simples em C
Classificado em Design e Engenharia
Escrito em em
português com um tamanho de 2,61 KB
Código-fonte em linguagem C demonstrando a criação, inserção, exibição e remoção lógica em uma lista encadeada simples com alocação dinâmica de memória.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct estrutura {
int itemValor;
struct estrutura *itemProximo;
} estruturaItens; // Cada elemento da lista foi chamado de estruturaItens
// Aloca a variável que a receber. Ex.: "x = criaAlocacao();" é a mesma coisa que "x = (estruturaItens*) malloc(sizeof(estruturaItens));"
estruturaItens* criaAlocacao() {
return (estruturaItens*) malloc(sizeof(estruturaItens));
}
// Mostra todos os elementos da lista
void exibeItens(estruturaItens *itemPrimeiro) {
estruturaItens *x = itemPrimeiro;
printf("Todos: %d - ", x->itemValor);
while (x->itemProximo != NULL) {
x = x->itemProximo;
printf("%d - ", x->itemValor);
}
printf("fim\n");
_getch();
}
// Remove um número da lista, substituindo-o por 0 (utiliza o mesmo loop da função exibeItens, porém recebe também o número a ser deletado)
void deletarItens(int itemDeletar, estruturaItens *itemPrimeiro) {
estruturaItens *x = itemPrimeiro;
if (x->itemValor == itemDeletar) {
x->itemValor = 0;
}
while (x->itemProximo != NULL) {
x = x->itemProximo;
if (x->itemValor == itemDeletar) {
x->itemValor = 0;
printf("%d Removido!", itemDeletar);
}
}
}
void adicionarItens(estruturaItens *itemPrimeiro) { // Adiciona elementos ao final da lista
int itemValor, itemQuantidade, i;
estruturaItens *y = NULL;
estruturaItens *x = itemPrimeiro;
printf("Quantidade: ");
scanf("%d", &itemQuantidade); // Quantidade a ser adicionada
for (i = 1; i <= itemQuantidade; i++) {
printf("itemValor: ");
scanf("%d", &itemValor); // Número a ser inserido
while (x->itemProximo != NULL) { // Percorre até o último elemento da lista
x = x->itemProximo;
}
// Nesse ponto x vale o último elemento da lista; a partir daí:
y = x; // y recebe o último elemento da lista
x = criaAlocacao(); // x aloca um novo elemento à lista
y->itemProximo = x; // y, que agora é o penúltimo, recebe o novo elemento como próximo
x->itemValor = itemValor; // x->itemValor recebe o novo número inserido
x->itemProximo = NULL; // x, que agora é o último elemento, recebe NULL como próximo
}
exibeItens(itemPrimeiro);
}