Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: carlosabcs18 en 4 Noviembre 2014, 21:33 pm



Título: [AYUDA] Listas anidadas?
Publicado por: carlosabcs18 en 4 Noviembre 2014, 21:33 pm
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


Título: Re: [AYUDA] Listas anidadas?
Publicado por: Flakito81 en 5 Noviembre 2014, 01:44 am
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.


Título: Re: [AYUDA] Listas anidadas?
Publicado por: carlosabcs18 en 5 Noviembre 2014, 02:17 am
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?


Título: Re: [AYUDA] Listas anidadas?
Publicado por: Flakito81 en 5 Noviembre 2014, 03:10 am
Pues igual que anades enfermos :)
Imagina algo tal que:
Código
  1. struct T_enfermedad
  2. {
  3.  char nombre[32]
  4.  struct T_enfermedad *sig;
  5. }
  6.  
  7. struct T_enfermo
  8. {
  9.   char nombre[32];
  10.   int edad;
  11.   //-- resto de campos
  12.   struct T_enfermedad *enfermedades;
  13.   struct T_enfermo *sig;
  14. }
  15.  
  16. int Nuevo_Enfermo( T_enfermo *Lista)
  17. {
  18.     struct T_enfermo *p;
  19.     p = (struct T_enfermo *) malloc (sizeof(struct T_enfermo));
  20.     if (!p) return -1; // no se pudo reservar memoria
  21.     p->enfermedades = NULL; //no tiene enfermedades
  22.     p->sig = NULL;
  23.    // lees la informacion del paciente y la guardas en p
  24.  
  25.    //-- ¿quieres añadir alguna enfermedad ? Si la respuesta es sí
  26.    Nueva_Enfermedad(p->enfermedades);
  27.    //---
  28.  
  29.    // añadir por el principio de la lista
  30.    if (Lista != NULL)
  31.      p->sig = Lista;
  32.    Lista = p;        
  33. }
  34.  
  35. int Nueva_enfermedad(T_enfermedad *lista)
  36. {
  37.  struct  T_enfermedad *p;
  38.   p = (struct T_enfermedad *) malloc (sizeof(struct T_enfermedad));
  39.   p->sig =NULL;
  40.   //-- pedir informacion y ponerla en p
  41.  
  42.    if (lista != NULL)
  43.      p->sig = lista;
  44.    lista = p;  
  45. }
  46.  
  47.  
  48. int main()
  49. {
  50.  struct  T_enfermo *Lista = NULL;
  51.  
  52.   // -- tu codigo
  53.  // -- opciones
  54.   switch {
  55.      case 1:
  56.         Nuevo_Enfermo(Lista);
  57.         break;
  58.  
  59.  
  60.   };
  61.  
  62. }
  63.  

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 ;)


Título: Re: [AYUDA] Listas anidadas?
Publicado por: carlosabcs18 en 5 Noviembre 2014, 03:27 am
Graaaaaaaacias bro, creo que voy captando la idea :D