Pular para o conteúdo

Lista Simplesmente Encadeada

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
Fagner Amaral de Souza Candido f_Candido
Hits: 41.426 Categoria: C/C++ Subcategoria: Avançado
  • Download
  • Nova versão
  • Indicar
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Descrição

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
Download listaEncadeadaSimples.c Enviar nova versão
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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);
}
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Locadora Simples c/arquivos

Mudando Cor da Letra e Fundo de Tela

Tabuada com QT4

Pilha com Ponteiros

Pilhas C/C++ - Analisador de expressões simples

#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

Entre na sua conta para comentar.