Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

jpedro20

Cinema - malloc

Mensagens Recomendadas

jpedro20

Podiam-me ajudar aqui?

typedef struct sCinema
{
  Sala s;
  struct sCinema *seg;
} *Cinema, NCinema;


Cinema inserirSala (Cinema c, Sala s)
{
  Cinema aux;
  
  if(!c)
  {
    aux = (Cinema) malloc (sizeof(NCinema));
    aux->s=s;
    aux->seg=NULL;
    return aux;
  }
  else
    c->seg=inserirSala (c->seg,s);
}

Não estou a conseguir inserir duas salas. Se for listar as salas apenas me dá a última. Parece que "grava" por cima da anterior. O que estou a fazer de errado?

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpedro20

Mas não tenho de retornar? No main eu tenho algo do genero:

c1=inserirSala (c1,s1);

c1=inserirSala(c1,s2);

e mesmo tirando o return continua continua só a aparecer a última sala inserida (s2)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

O teu algoritmo insere a nova sala de cinema no fim da lista e no fim retorna essa última sala, por isso é que tu só estás a ver a última sala, em vez de as veres todas. Tens é de encontrar forma de guardar o início da lista, depois inseres tudo o que há a inserir e no fim retornas o início. Só assim poderás aceder a toda a lista.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpedro20

Ah já percebi. Obrigado pela ajuda. Vou tentar e se não conseguir posto mais dúvidas  :)

EDIT: Já consegui. Uma coisa tão fácil e estava a complicar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpedro20

Já agora deixo aqui a solução para inserir a sala no fim:

Cinema inserirSala (Cinema c, Sala s)
{
  Cinema aux;
  
  if(!c)
  {
    aux = (Cinema) malloc (sizeof(NCinema));
    aux->s=s;
    aux->seg=NULL;
    return aux;
  }
  else
  {
    c->seg=inserirSala (c->seg,s);
    return c;
  }
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpedro20

Obrigado. Eu já tinha visto isto no teu blogue (que por acaso acompanho) e percebi. O meu professor usa muito a recursividade por isso é que fiz assim também.

Mas alguma razão por não gostares de usar a recursividade em listas ligadas?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Tenta fazer um loop assim grande e chamar a função com esse loop e com dados aleatórios e vê o que acontece.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.