Lista Encadeada Simples em C: Implementação
Classificado em Eletrônica
Escrito em em português com um tamanho de 3,76 KB
Estrutura da Lista
struct lista {
int info;
struct lista *prox;
};
typedef struct lista Lista;
Função de Inicialização
// Função de inicialização: retorna uma lista vazia
Lista* inicializa(void) {
return(NULL);
}
Função de Inserção
/* Inserção no início: retorna a lista atualizada */
Lista* insere(Lista* l, int i) {
Lista* novo = (Lista*)malloc(sizeof(Lista));
novo->info = i;
novo->prox = l;
return novo;
}
Função Imprime
/* Função imprime: imprime valores dos elementos */
void imprime(Lista* l) {
Lista* p; /* Variável auxiliar para percorrer a lista */
for (p = l; p != NULL; p = p->prox) {
printf("info = %d\n", p->info);
}
}
Função Vazia
/* Função vazia: retorna 1 se vazia ou 0 se não vazia */
int vazia(Lista* l) {
if (l == NULL) {
return 1;
} else {
return 0;
}
}
Função Busca
/* Função busca: busca um elemento na lista */
Lista* busca(Lista* l, int v) {
Lista* p;
for (p = l; p != NULL; p = p->prox) {
if (p->info == v) {
return p; /* Achou o elemento */
}
}
return NULL; /* Não achou o elemento */
}
Função Retira
/* Função retira: retira elemento da lista */
Lista* retira(Lista* l, int v) {
Lista* ant = NULL; /* Ponteiro para elemento anterior */
Lista* p = l; /* Ponteiro para percorrer a lista */
/* Procura elemento na lista, guardando anterior */
while (p != NULL && p->info != v) {
ant = p;
p = p->prox;
}
/* Verifica se achou elemento */
if (p == NULL) {
return l; /* Não achou: retorna lista original */
}
/* Retira elemento */
if (ant == NULL) {
/* Retira elemento do início */
l = p->prox;
} else {
/* Retira elemento do meio da lista */
ant->prox = p->prox;
}
free(p);
return l;
}
Função Libera
/* Função libera: libera toda a memória alocada */
void libera(Lista* l) {
Lista* p = l;
while (p != NULL) {
Lista* t = p->prox; /* Guarda referência para o próximo elemento */
free(p); /* Libera a memória apontada por p */
p = t; /* Faz p apontar para o próximo */
}
}
Função Principal (Exemplo de Uso)
// Incluir bibliotecas necessárias no arquivo .c completo:
// #include <stdio.h>
// #include <stdlib.h>
// #include <conio.h> // Para getch() - não padrão
int main(void) {
Lista* l; /* Declara uma lista não iniciada */
l = inicializa(); /* Inicia lista vazia */
l = insere(l, 23); /* Insere na lista o elemento 23 */
l = insere(l, 45); /* Insere na lista o elemento 45 */
l = insere(l, 56); /* Insere na lista o elemento 56 */
l = insere(l, 78); /* Insere na lista o elemento 78 */
printf("Lista após inserções:\n");
imprime(l); /* Imprimirá: info = 78\n info = 56\n info = 45\n info = 23\n */
printf("\n--------------\n");
printf("Após retirar 78:\n");
l = retira(l, 78);
imprime(l); /* Imprimirá: info = 56\n info = 45\n info = 23\n */
printf("\n--------------\n");
printf("Após retirar 45:\n");
l = retira(l, 45);
imprime(l); /* Imprimirá: info = 56\n info = 23\n */
printf("\n--------------\n");
printf("Liberando a lista...\n");
libera(l);
// getch(); // Usar getchar() ou remover para portabilidade
printf("Pressione Enter para sair...\n");
getchar(); // Aguarda o usuário pressionar Enter
return 0;
}