Jump to content
alphasil

Lista duplamente ligada, dúvidas

Recommended Posts

alphasil

Oi

Tenho uma lista duplamente ligada pedida num dos exames que diz que tenho de fazer a estrutura e a função local em main. (feito)

Depois pede para criar uma função que simula o registo de um cliente acrescentando-o na lista.

Fiz assim seguindo um exercício de listas mas dá-me dois warnings que não percebo porquê?:

#include <stdio.h>
#include <stdlib.h>
typedef struct churr{
   char mat[100];
   char pedido[100];
   float preco;
}INFO;
typedef struct elemento{
   INFO nodo;
   struct elem *Seguinte;
   struct elem *Anterior;
}ELEM;
int recebeCliente(INFO info, ELEM **initlista, ELEM **fimlista)
{
   ELEM *novo;
   novo=(ELEM*)malloc(sizeof(ELEM));
   novo->nodo=info;
   novo->Seguinte=NULL;
   novo->Anterior=NULL;
   if(*initlista==NULL)
   {
    novo=*initlista;
    novo=*fimlista;
   }
   novo->Anterior=*fimlista;
   (*fimlista)->Seguinte=novo;
   *fimlista=novo;
return 0;
}
int main()
{
   ELEM *initlista=NULL, *fimlista=NULL;
   INFO info;
   printf("Matricula: \n");
   gets(info.mat);
   printf("Descricao: \n");
   gets(info.pedido);
   printf("Preco: \n");
   scanf("%f",&info.preco);
   getchar();
   recebeCliente(info,&initlista,&fimlista);
   return 0;
}

D:\2012\c_exe\Pergunta 1 Modulo 2\main.c||In function 'recebeCliente':|

D:\2012\c_exe\Pergunta 1 Modulo 2\main.c|29|warning: assignment from incompatible pointer type [enabled by default]|

D:\2012\c_exe\Pergunta 1 Modulo 2\main.c|30|warning: assignment from incompatible pointer type [enabled by default]|

||=== Build finished: 0 errors, 2 warnings ===|

Alguém me consegue explicar o porquê?

Share this post


Link to post
Share on other sites
pmg

typedef struct elemento{
   INFO nodo;
   struct elem *Seguinte;
   struct elem *Anterior;
}ELEM;

Nao consigo descobrir a definicao da struct elem em lado nenhum.

So vejo a definicao duma struct churr e doutra struct elemento.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
alphasil

Tens razão PMG, só cenas básicas, sou mesmo cego, quero começar de uma forma e depois escrevo outra.

Mas mesmo assim dá-me um segmentation fault aqui:

novo->Anterior=*fimlista;

Share this post


Link to post
Share on other sites
pmg

dá-me um segmentation fault aqui:

novo->Anterior=*fimlista;

A logica do teu programa nao esta bem.

Da maneira que o escreveste, o valor da variavel novo, nessa linha do programa, é NULL (copiado de *fimlista; que veio do main a NULL).


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
alphasil

Resolvi a situação dos warnings com chavetas, agora criei uma função para listar e nada aparece...

#include <stdio.h>
#include <stdlib.h>
typedef struct churr{
   char mat[100];
   char pedido[100];
   float preco;
}INFO;
typedef struct elem{
   INFO nodo;
   struct elem *Seguinte;
   struct elem *Anterior;
}ELEM;
int recebeCliente(INFO info, ELEM **initlista, ELEM **fimlista)
{
   ELEM *novo;
   novo=(ELEM*)malloc(sizeof(ELEM));
   novo->nodo=info;
   novo->Seguinte=NULL;
   novo->Anterior=NULL;
   if(novo==NULL)
   {
    printf("Erro na lista...");
    return -1;
   }
   if(*initlista==NULL)
   {
    novo=*initlista;
    novo=*fimlista;
   }
   else
   {
    novo->Anterior=*fimlista;
    (*fimlista)->Seguinte=novo;
    *fimlista=novo;
   }
return 0;
}
int listar(ELEM *initlista)
{
   ELEM *aux;
   aux=initlista;
   while(aux!=NULL)
   {
    printf("%s %s %.2f", aux->nodo.mat, aux->nodo.pedido, aux->nodo.preco);
    aux=aux->Seguinte;
   }
   return 0;
}
int main()
{
   ELEM *initlista=NULL, *fimlista=NULL;
   INFO info;
   printf("Matricula: \n");
   gets(info.mat);
   printf("Descricao: \n");
   gets(info.pedido);
   printf("Preco: \n");
   scanf("%f",&info.preco);
   getchar();
   recebeCliente(info,&initlista,&fimlista);
   listar(initlista);
   return 0;
}

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.