Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Reiniciar lista enlazada

Estas en el tema de Reiniciar lista enlazada en el foro de C/C++ en Foros del Web. Hola amigos. Estoy haciendo un programa en el cual tengo una lista enlazada dentro de otra. Me explico, la lista principal contiene: nombre apellidos lista ...
  #1 (permalink)  
Antiguo 07/05/2009, 09:19
 
Fecha de Ingreso: agosto-2008
Mensajes: 79
Antigüedad: 15 años, 8 meses
Puntos: 0
Reiniciar lista enlazada

Hola amigos.

Estoy haciendo un programa en el cual tengo una lista enlazada dentro de otra. Me explico, la lista principal contiene:

nombre
apellidos
lista enlazada aficiones

La lista de aficiones debe tener al menos una aficion. Pues bien, consigo almacenar todo bien. Pero cuando voy a mostrar la lista principal (que a su vez dentro debe mostrar estas aficones) las aficiones no me salen, me imprime (null) como si estuviese apuntando al final.

Como podria hacer que esta lista de aficiones apunte a su primer elemento??

El lenguaje de programacion es C.

Tengo una cabecera llamada estructuras.h:

Código:
typedef struct aficion
    {
        char tipo [100]; // Nombre de la categoria
        char descripcion [300];
        struct aficion *siguiente;
    }aficion; // Definimos el tipo de estructura como tipo categoria
   
typedef struct nodo
    {
       char nombre [100]; // Nombre del jugador
       char apellido [100];
       int numaficiones;
       aficion *extra;
       struct nodo *siguiente;       
    }Nodo;

Almaceno los datos asi (interpretar es una funcion proporcionada por el maestro, que funciona perfectamente):

Código:
Nodo *nuevo;
while (fgets(linea,500,fichero)!=NULL)
           {   
                     lectura=interpretar(linea, etiqueta,parametro,campo);
                     if ((lectura==1)&&(strcmp(etiqueta,"NOMBRE")==0))
                        strcpy(nuevo->nombre,campo);
                   if ((lectura==1)&&(strcmp(etiqueta,"APELLIDO")==0))     
                             strcpy(nuevo->apellido,campo);
                          if ((lectura==3)&&(strcmp(etiqueta,"AFICIONES")==0))     
                             nuevo->numaficiones=atoi(parametro);
                          if ((lectura==1)&&(strcmp(etiqueta,"A")==0))   
                          { 
                             nuevo->extra=(aficion*)malloc(sizeof(aficion));
                             strcpy(nuevo->aficion->tipo,campo);
                             nuevo->aficion=nuevo->aficion->siguiente;
                          }
                }

Y muestro la lista asi:

Código:
void MostrarLista(Nodo *cabeza)
{
  Nodo *nodo = cabeza;
  if(ListaVacia(cabeza))
       printf("Actualmente no se encuentra ningun usuario en nuestra base de datos\n");
   else
   {
   while(nodo)
   {
      printf("Nombre: %s\nApellido: %s\nNumero aficiones: %d\n\n", nodo->nombre,nodo->apellido,nodo->numaficiones);
      while (nodo->extra!=NULL)
      {
         printf ("\tAficion: %s\n\n",nodo->extra->tipo);
         nodo->extra=nodo->extra->siguiente;
      }
      nodo = nodo->siguiente;
   }
   printf("\n\n");
   }
}
El caso es que almacena todo bien, y cuando voy a la funcion mostrar me muestra perfectamente todos los nombres, apellidos y numero de aficiones, pero no me muestra el tipo de las aficiones:

Código:
Nombre: Juan
Apellido: Bartolome
Num aficiones: 3
Aficion: (null)
Es como si la lista de aficiones o estuviese vacia o estuviese apuntando al final. COmo podria hacer para que apunte a su primer nodo y muestre todos los datos que tiene??

Tendria que quedar asi:

Código:
Nombre: Juan
Apellido: Bartolome
Num aficiones: 3
Aficion: futbol
Aficion: cartas
Aficion: dormir
Muchas gracias por vuestro tiempo, un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:02.