Lista Simplesmente Encadeada
Publicado por Fagner Amaral de Souza Candido 17/06/2008
[ Hits: 41.302 ]
Homepage: https://github.com/fagnercandido
Download listaEncadeadaSimples.c
Para aqueles que necessitem de um exemplo simples de lista encadeada, usando alocação dinâmica, eis um exemplo bem simples. A inserção e remoção são feitas na cabeça, logo a ordenação foi deixada de lado, para que a compreesão pudesse ser melhor.
Críticas construtivas, sugestões ou correções são sempre bem-vindas.
Espero que seja de ajuda.
Abraços
// Autor : Fagner Candido
/*
Sintese
Objetivo: Implementar uma Lista Simplesmente Encadeada
Entrada : Valores Inteiros.
Saida : A busca
Data : 17/05/2008
*/
#include <stdio.h>
#include <stdlib.h>
/*
Estrutura que define a Lista
Lembrando que a a instrução: struct celulaLista *proximo
é uma estrutura auto-referenciada, ou seja, neste caso
é uma estrutura que aponta para a próxima estrutura.
*/
typedef struct celulaLista{
int informacao;
struct celulaLista *proximo;
}celula;
int main(){
// Declarações
celula *pLista;
int opcao = 0;
// Funções
void initLista(celula **pRecebido);
void insertLista(celula **pRecebido);
void buscaListaSimples(celula **pRecebido);
void removeElementoListaSimples(celula **pRecebido);
int leValor(int *valorRecebido);
// Instruções
pLista = (celula *)malloc(sizeof(struct celulaLista));
initLista(&pLista);
for(;;){
printf("\n1 - Inserir : ");
printf("\n2 - Consultar: ");
printf("\n3 - Remover");
printf("\n4 - Sair\n");
scanf("%d", &opcao);
opcao = leValor(&opcao);
switch(opcao)
{
case 1:
insertLista(&pLista);
break;
case 2:
buscaListaSimples(&pLista);
break;
case 3:
removeElementoListaSimples(&pLista);
break;
case 4:
exit(0);
}
}
return 0;
}
/*
Inicialização da Lista Encadeada
*/
void initLista(celula **pRecebido){
(*pRecebido)->proximo = NULL;
}
/*
Função para Inserção no Início
*/
void insertLista(celula **pRecebido){
// Declarações
celula *temporario;
int valor;
// Instruções
printf("\nInforme um Valor a ser Inserido : ");
scanf("%d", &valor);
temporario = (celula *)malloc(sizeof(celula));
temporario->informacao = valor;
temporario->proximo = (*pRecebido)->proximo;
(*pRecebido)->proximo = temporario;
}
/*
Função para Percorrer Elementos
*/
void buscaListaSimples(celula **pRecebido){
// Declarações
celula *temporario;
// Instruções
if((*pRecebido)->proximo == NULL){
printf("Lista Vazia!\n");
}
else{
temporario = (celula *)malloc(sizeof(celula));
temporario = (*pRecebido)->proximo;
while(temporario != NULL){
printf("Valor : %d\n", temporario->informacao);
temporario = temporario->proximo;
}
}
}
/*
Remove Elemento da Cabeça
*/
void removeElementoListaSimples(celula **pRecebido){
// Declarações
celula *temporario;
// Instruções
if((*pRecebido)->proximo == NULL){
printf("\nLista Vazia!");
}
else{
temporario = (*pRecebido)->proximo;
(*pRecebido)->proximo = temporario->proximo;
free(temporario);
}
}
/*
Opção para Validação da Entrada
*/
int leValor(int *valorRecebido){
// Declarações
// Instruções
while((*valorRecebido > 4) || (*valorRecebido < 1)){
printf("Opcao Invalida. Informe novamente : \n");
scanf("%d", &(*valorRecebido));
}
return(*valorRecebido);
}
Busca em texto - Lista encadeada
Exemplo de sistema especialista usando Inteligência Artificial
Estrutura de dados: Lista dinâmica duplamente encadeada
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como fazer a conversão binária e aplicar as restrições no Linux
Como quebrar a senha de um servidor Linux Debian
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático









