1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

duvida lista ligada C

Discussão em 'Programação' iniciada por 111lei, 10 de Julho de 2008. (Respostas: 6; Visualizações: 958)

  1. bem, estou aqui com umas duvidas no que toca a listas ligadas..

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct slista {
            int valor;
            struct slista *seg;
    } *Lista,*inicio;
    int main()
    {
        struct slista *li;
                      li=(struct slista*)malloc(sizeof(struct slista));
                      li->valor=20;
                      inicio = li;
                      li=li->seg=(struct slista*)malloc(sizeof(struct slista));
                      li->valor=28;
                      li=li->seg=(struct slista*)malloc(sizeof(struct slista));
                      li->valor=47;
                      
                      printf("%d",li->valor);
    return 0;
    }
    
    eu n devia poder fazer:
    Código:
    li=(Lista*)malloc(sizeof(Lista));
    ?
    ao compilar da-me um erro em
    Código:
    inicio =li;
    erro:
    alguém sabe porque?

    eu ao fazer
    Código:
    printf("%d",li->valor);
    apenas me vai imprimir o ultimo valor da lista, existe alguma maneira de imprimir a lista toda sem tem de correr posição a posição da lista?

    cumps
     
  2. CoolMaster

    CoolMaster Power Member

    inicio = li;

    Se reparares o teu inicio é um tipo de dados que definiste com o typedef, portanto não podes fazer atribuições com ele.

    Quanto a questão da listagem, precisas de percorrer a lista toda a menos que mantenhas um pointer para o elemento que te é mais importante (seja lá o que isso for para ti).
     
  3. esse pointer era o meu inicio.. então terei de declara lo como struct slista *inicio; ?
     
  4. bem ja consegui o que queria o resultado final foi este:

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct slista {
            int valor;
            struct slista *seg;
    } *Lista;
    int main()
    {
        struct slista *li,*inicio;
                      li=(struct slista*)malloc(sizeof(struct slista));
                      li->valor=20;
                      inicio = li;
                      li=li->seg=(struct slista*)malloc(sizeof(struct slista));
                      li->valor=28;
                      li=li->seg=(struct slista*)malloc(sizeof(struct slista));
                      li->valor=47;
                      li->seg=NULL;
                      li=inicio;
                      while(li!=NULL)
                      {
                      printf("%d\n",li->valor);
                      li=li->seg;
                      }
    return 0;
    }
    
    mais uma vez obrigado ;)

    mas continuo com a duvida n devia poder fazer li=malloc(Lista*)(sizeof(Lista)) ?
     
    Última edição: 10 de Julho de 2008
  5. Dragon_Tamer

    Dragon_Tamer Power Member

    A variavel "Lista", e ja de si um ponteiro de "struct slista". Se fores a usa-la devera ficar algo como:
    li=(Lista)(malloc(sizeof(Lista))
    De resto parece-me que esta bom.
     
  6. Baderous

    Baderous Banido

    Não. O sizeof não recebe um apontador, mas sim a estrutura:

    Código:
    li = (Lista)malloc(sizeof(struct slista));
     
  7. hum, ok thanks ;)
     

Partilhar esta Página