Jump to content

Cinema - malloc


jpedro20
 Share

Recommended Posts

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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;
  }
}
Link to comment
Share on other sites

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?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • 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.