jpedro20 2 Denunciar mensagem Publicado 2 de Junho de 2010 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
Baderous 33 Denunciar mensagem Publicado 2 de Junho de 2010 O problema é que estás a fazer return da última estrutura que crias, isto é, o aux. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
jpedro20 2 Denunciar mensagem Publicado 2 de Junho de 2010 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 33 Denunciar mensagem Publicado 2 de Junho de 2010 O problema é que estás a retornar o endereço da última célula da lista, tens de retornar o da 1ª. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
jpedro20 2 Denunciar mensagem Publicado 2 de Junho de 2010 Desculpa não estou a perceber. Podias explicar melhor? Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
Baderous 33 Denunciar mensagem Publicado 2 de Junho de 2010 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 2 Denunciar mensagem Publicado 2 de Junho de 2010 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 2 Denunciar mensagem Publicado 3 de Junho de 2010 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
Localhost 3 Denunciar mensagem Publicado 3 de Junho de 2010 Estás a trabalhar recursivamente com listas ligadas? here since 2009 Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
jpedro20 2 Denunciar mensagem Publicado 3 de Junho de 2010 Sim estou. Mas aconselhas a fazer de forma iterativa? Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
Localhost 3 Denunciar mensagem Publicado 3 de Junho de 2010 Sim, deixo aqui um link que te pode ajudar. here since 2009 Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
jpedro20 2 Denunciar mensagem Publicado 3 de Junho de 2010 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 3 Denunciar mensagem Publicado 3 de Junho de 2010 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