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);
}

Entradas relacionadas: