• Jueves 14 de Noviembre de 2024, 04:28

Autor Tema:  Estructuras, listas, memoria dinamica  (Leído 1083 veces)

System@32

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Estructuras, listas, memoria dinamica
« en: Sábado 7 de Marzo de 2009, 17:40 »
0
Código: C
  1.  
  2. struct s_cites
  3. {
  4.     int id; //id de la reunion             
  5.     char nom[LENGTH_CHAR]; //nombre de la persona          
  6.     char lloc[LENGTH_CHAR]; //ligar de la reunion          
  7.     struct t_data data; //data de la reunion                   
  8.     struct t_hora hora; //hora de la reunion           
  9.     struct s_cites *seguent; //puner hacia la siguiente reunion    
  10.     struct s_cites *anterior; //punter hacia la anterior reunion       
  11. };
  12.  
  13.  

nueva ficha...
Código: C
  1.  
  2. struct s_cites *nova_fitxa(struct s_cites *llista)
  3. {
  4.     struct s_cites *val;
  5.     val = (struct s_cites *)malloc(sizeof(struct s_cites));
  6.     *val = introCites();
  7.     llista = nou_element(val,llista);
  8.     id_struct(val);
  9.     return(llista);
  10. }
  11.  
  12.  

nuevo elemento en la lista -> mi problema viene aqui... si en la lista no hay nada facil... el problema es cuando hay elementos... no se como decir a la estructura cual es la anterior y a la anterior estructura que la actual, esta es la siguiente...
Código: C
  1.  
  2. struct s_cites *nou_element(struct s_cites *cita, struct s_cites *llista)
  3. {
  4.      
  5.     if(llista == NULL)
  6.     {
  7.         cita->seguent = NULL;
  8.         cita->anterior = NULL;
  9.     }
  10.     else
  11.     {
  12.         cita->seguent = NULL;
  13.         cita->anterior->seguent = llista;
  14.         cita->anterior = cita->anterior->anterior;
  15.     }
  16.     llista = cita;
  17.     return(llista);
  18. }
  19.  
  20.  

PD: perdonad que no este traducido... es un trabajo que nos lo mandaron como de hoy para mañana...

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Estructuras, listas, memoria dinamica
« Respuesta #1 en: Martes 10 de Marzo de 2009, 16:45 »
0
Como veo, el problema radica aquí:

Código: C
  1. else
  2. {
  3.     cita->seguent = NULL;
  4.     cita->anterior->seguent = llista;
  5.     cita->anterior = cita->anterior->anterior;
  6. }
  7.  
Primero, debes recorrer llista (por recursividad o iteración, como veas) hasta llegar al último elemento, que donde vas a enlazar el nuevo, luego ya lo insertas.

System@32

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Estructuras, listas, memoria dinamica
« Respuesta #2 en: Martes 10 de Marzo de 2009, 20:27 »
0
Bueno... al final conseguí hacerlo... no era tan complicado
cita -> es la estructura actual
llista -> contiene la estructura anterior

y me he declaro otro puntero "actual" que contiene el valor/posicion de la memoria de la estructura
Código: C
  1.  
  2. struct s_cites *nou_element(struct s_cites *cita, struct s_cites *llista)
  3.  
  4. {
  5.  
  6.     if(llista == NULL) 
  7.  
  8.     {
  9.  
  10.         cita->seguent = NULL;
  11.  
  12.         cita->actual = cita;
  13.  
  14.         cita->anterior = NULL;
  15.  
  16.     }
  17.  
  18.     else
  19.  
  20.     {
  21.  
  22.         cita->anterior = llista->actual;
  23.  
  24.         cita->seguent = NULL;
  25.  
  26.         llista->seguent = cita;
  27.  
  28.         cita->actual = cita;       
  29.  
  30.     }
  31.  
  32.     llista = cita;
  33.  
  34.     return(llista);
  35.  
  36. }
  37.  
  38.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Estructuras, listas, memoria dinamica
« Respuesta #3 en: Miércoles 11 de Marzo de 2009, 09:35 »
0
Lo que pasa es que tal y como lo has hecho, llista siempre apunta al último elemento insertado, con lo que no estás haciendo una lista, sino una pila. Aparte de que es superfluo que cita->actual siempre apunte a cita, que es el último elemento insertado, que ya está apuntado por llista.

Salud