[AYUDA] Listas anidadas?

Iniciado por carlosabcs18, 4 Noviembre 2014, 21:33 PM

0 Miembros y 1 Visitante están viendo este tema.

carlosabcs18

Hola, me dejaron que haga el siguiente ejercicio usando listas:
Se tiene una lista de n enfermos (código, nombres, apellidos, dirección, teléfono, genero
[M,F],edad), además c/u tiene una o mas enfermedades (código, nombre,
tipodeenfermedad[Contagiosa, Maligna, Benigna, Mortal]) y se quiere crear un programa
que permita:
a. Crear un nuevo paciente y sus enfermedades
b. Eliminar paciente (en una cierta posición), y sus enfermedades (si un paciente tiene
asignado una enfermedad esté ya no se puede borrar)
c. Actualizar pacientes y enfermedades
d. Mostrar listado (pacientes por enfermedades)
e. Copiar datos de enfermedades de un paciente a otro


El programa se puede codificar usando cualquier tipo de lista(simple,doble,circular).


Ahora, mi problema es el hecho de que tengo una lista "M" de enfermos con "N" cantidad de enfermedades o sea estructuras anidadas, que en este caso seria una lista anidada, pero como se trabajan las listas anidadas?
Analizando un poco el ejercicio, pensé que necesito 2 punteros para cada nodo(enfermo): uno que apunte al nodo siguiente y uno que apunte a la lista de enfermedades, estoy yendo por buen camino o algo anda mal con mi idea?
Pls help mee!! :C

Flakito81

No creo que nadie te haga el ejercicio, de todas maneras vas bien.
Una lista para enfermos y dentro de ese 'nodo/ficha' (o como lo quieras llamar) tienes otro puntero con las enfermedades. El movimiento de punteros es el mismo, lo unico que cambia es la informacion que contiene.

carlosabcs18

Hola, no quiero que me hagan el ejercicio, es muy tedioso como para hacerlo para otra persona, solo lo puse como referencia.
Una duda, todo bien con el puntero dentro de enfermo que apunta a lista de enfermedades pero como hago para registrar las enfermedades de cada enfermo y luego reportarlas?

Flakito81

#3
Pues igual que anades enfermos :)
Imagina algo tal que:

struct T_enfermedad
{
 char nombre[32]
 struct T_enfermedad *sig;
}

struct T_enfermo
{
  char nombre[32];
  int edad;
  //-- resto de campos
  struct T_enfermedad *enfermedades;
  struct T_enfermo *sig;
}

int Nuevo_Enfermo( T_enfermo *Lista)
{
    struct T_enfermo *p;
    p = (struct T_enfermo *) malloc (sizeof(struct T_enfermo));
    if (!p) return -1; // no se pudo reservar memoria
    p->enfermedades = NULL; //no tiene enfermedades
    p->sig = NULL;
   // lees la informacion del paciente y la guardas en p

   //-- ¿quieres añadir alguna enfermedad ? Si la respuesta es sí
   Nueva_Enfermedad(p->enfermedades);
   //---

   // añadir por el principio de la lista
   if (Lista != NULL)
     p->sig = Lista;
   Lista = p;        
}

int Nueva_enfermedad(T_enfermedad *lista)
{
 struct  T_enfermedad *p;
  p = (struct T_enfermedad *) malloc (sizeof(struct T_enfermedad));
  p->sig =NULL;
  //-- pedir informacion y ponerla en p

   if (lista != NULL)
     p->sig = lista;
   lista = p;  
}


int main()
{
 struct  T_enfermo *Lista = NULL;

  // -- tu codigo
 // -- opciones
  switch {
     case 1:
        Nuevo_Enfermo(Lista);
        break;


  };

}


obviamente es un codigo de referencia, va a contener algun error.
Si quieres añadile mas enfermedades lo unico que tienes que hacer es localizar al enfermo recorriendo la lista y luego le pasas el puntero 'enfermedades'.

Un saludo!

PD:Cambia el nombre de las funciones porque esta noche no estoy muy original ;)

carlosabcs18

Graaaaaaaacias bro, creo que voy captando la idea :D