Lista Simplesmente Encadeada

Publicado por Fagner Amaral de Souza Candido 17/06/2008

[ Hits: 40.965 ]

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

  



Esconder código-fonte

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

Scripts recomendados

Registro

Derrubando SyGate Profissional Firewall !

Memória compartilhada, semáforo e criação de processos

Jogo da velha em C

Rotina para controle de portas paralelas em C. (biblioteca LP.h)


  

Comentários
[1] Comentário enviado por DanielGimenes em 19/06/2008 - 14:46h

Bem legal. Aprendi muito no 2º semestre da faculdade quando tive que fazer códigos assim!

Para aqueles que nunca viram estruturas de dados, recomendo aprenderem. Te dá uma visão diferente sobre banco de dados e programação em geral.

Valeu f_Candido!

[2] Comentário enviado por CaduDevUbuntu em 21/09/2018 - 09:55h

Bom dia Fagner,

Gostaria de perguntar, por que no for na main vc não colocou nada entre os ";":
"for(;;){"
Sou novato na linguagem C, e nã entendi direito.

[3] Comentário enviado por f_Candido em 21/09/2018 - 10:07h


[2] Comentário enviado por CaduDevUbuntu em 21/09/2018 - 09:55h

Bom dia Fagner,

Gostaria de perguntar, por que no for na main vc não colocou nada entre os ";":
"for(;;){"
Sou novato na linguagem C, e nã entendi direito.


Este tipo de instrução significa que é um loop infinito. Quando você inicializa seu loop e coloca limites, ele vai executar um determinado número de vezes.
Contudo, ao usar este tipo de construção, com ;, você fará um loop infinito. No caso deste programa, ele sempre ficará nesta tela, até selecionar algo.

Té,


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts