Ir para conteúdo
Fórum Script Brasil
  • 0

Lista Dinâmica


Shinzo8

Pergunta

Oi estou com uma dúvida num exercicio de lista dinamica, nesse código eu consigo mostrar só o ultimo valor que o usuário digita, queria saber saber como mostrar todos os elementos de uma lista.

vlw.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>



typedef struct bloco
{
        
        int dado;
        struct bloco *prox;
}nodo;

nodo *cria_nodo()
{
     
     nodo *p;
     p=(nodo*) malloc(sizeof(nodo));
     
     if(!p)
     {
           printf("\nErro");
           exit(0);
     }
     
     
     return p;
}
void insere_lista(nodo **N, int dado)
{
     nodo *novo;
     novo=cria_nodo();
     novo->dado=dado;
     novo->prox=*N;
     *N=novo;
}




int main()
{
    int valor,valor1;
    nodo *lista=NULL;
    
    
    
     printf("Digite o valor");scanf("%d",&valor);
     printf("Digite o valor2");scanf("%d",&valor1); 
    
  
  
       insere_lista(&lista,valor);
       insere_lista(&lista,valor1);
    
        printf("Primeiro dado %d",*lista);  
       printf("Segundo dado %d",*lista);         
                  
           
               
      
    
   
    
    printf("\n");
      
    
    system("PAUSE");
    getch();
    return 0;
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá Shinzo8,

O problema no seu código está justamente nos comandos printf() que estão mostrando ambos o primeiro valor da lista. Creio que faltou uma função para retirada desse valores, como esta:

int retira_lista(nodo **N, int dado)
{
     nodo *prev, *curr, *aux;
     
     if (*N == NULL)                 // Se vazia...
        return 0;                    // retorna 0
     
     else {                          // Senão:
         prev = *N;
         curr = (*N)->prox;
         while (curr != NULL && curr->dado != dado) {   // Elemento == dado
               prev = curr;                             // Senão vai pro próximo
               curr = curr->prox;
         }
         
     if (curr != NULL)               // Se encontrou
        aux = curr;
        curr = prev;                 // Exclui o elemento
        free(aux);                   // Libera espaço na memória
        return dado;                 // Volta o dado encontrado
     }
      return 0;                                         // Senão volta 0.
}
As chamadas a printf() ficariam:
printf("Primeiro dado %d", retira_lista(&lista, valor));  
       printf("Segundo dado %d", retira_lista(&lista, valor1));

Falou!

Editado por == Douplus ==
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...