• Domingo 5 de Mayo de 2024, 09:45

Autor Tema:  Solucion Para Multilistas  (Leído 2850 veces)

_Maite_

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Solucion Para Multilistas
« en: Martes 12 de Junio de 2007, 21:52 »
0
Hola, soy nueva en esto de programación y en la Universidad no dieron una tarea, la cual consiste en crear una lista que contenga nombres estos nombres ya deben estar determinados en el código, luego de cada nodo de la lista principal hacer una sub-lista la cual contenga la edad y fecha de nacimiento de la persona.

Ya tengo echa la lista principal pero mi problema es que no puedo hacer la sub-lista, osea tengo definida la sub-lista pero los datos de esta me reemplazan a mi lista principal

acá les dejo el código para que lo vean y me den sugerencias, ideas o modificaciones del codigo

Código: Text
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. //definimos una lista de lista ... de cada nodo de la lista principal se desprende otra lista
  5.  
  6. typedef struct SubNodo {
  7.   struct SubNodo *proximo;
  8.   char nombre[20];
  9.   int dato;
  10. } SubNodo;
  11.  
  12. typedef struct miNodo {
  13.   struct SubNodo *sig;
  14.   struct miNodo *proximo;
  15.   char nombre[20];
  16.   int dato;
  17. } Nodo;
  18.  
  19. int FALSE=0,TRUE=1;
  20.  
  21. int CrearNodo( SubNodo* actual,int valor, char *nombre);
  22. int insertar3(Nodo* actual, int valor, char *nombre);
  23. void crearlista(SubNodo*);
  24. void crearlista(Nodo*);
  25. void ver(SubNodo *);
  26. void ver(Nodo *);
  27.  
  28. void llenar(Nodo *);
  29.  
  30. int main(void)
  31. {
  32.  
  33.   SubNodo *nuevo;
  34.  
  35.  
  36.         Nodo *Raiz;
  37.         //SubNodo *Rai;
  38.         int salir =1,n;
  39.         Nodo *nod;
  40.         Raiz= (Nodo *) malloc(sizeof(Nodo));
  41.         Raiz->proximo=NULL;
  42.  
  43.   nuevo=(SubNodo*)malloc(sizeof(SubNodo));
  44.  
  45.   nuevo->proximo=NULL;
  46.     nuevo->nombre[0]='\0';
  47.  strcat(nuevo->nombre,"aa");
  48.       nuevo->dato=0;
  49.  crearlista(nuevo);
  50.  
  51.   Raiz->sig=nuevo;
  52.  
  53.  
  54.         Raiz->nombre[0]='\0';
  55.         strcat(Raiz->nombre,"Raiz");
  56.       Raiz->dato=0;
  57.         crearlista(Raiz);
  58.         while(salir)
  59.         {
  60.                 system("cls");
  61.                 printf("Seleccione la Accion\n\n");
  62.                 printf("\t1.- Ver Nodos\n");
  63.                 printf("\t2.- ver\n");
  64.                 printf("\t3.- Buscar Nodo\n");
  65.                 printf("\t4.- Salir\n");
  66.                 printf("\t\tOpcion: ");
  67.                 scanf("%i",&n);
  68.                 switch(n)
  69.                 {
  70.                         case 1:
  71.                                 ver(Raiz);
  72.                                 ver(nuevo);
  73.                                
  74.                                
  75.                                 break;
  76.                         case 2:
  77.                                
  78.                                 break;
  79.                         case 3:
  80.                                
  81.                                 break;
  82.                         default:
  83.                                 salir=0;
  84.                 }
  85.  
  86.                 system("pause");
  87.         }
  88.         return 0;
  89. }
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96. void crearlista(Nodo* actual)
  97. {
  98.         int i;
  99.         char c[7][10]={"juan","pedro","marcos","maria","gonzalo","julio","anibal"}; // vector de caracteres osea es una matriz de 2 dimensiones
  100.       char nombre[20];
  101.  
  102.     for(i=0; i<7; i++)
  103.  
  104.     {
  105.    
  106.     sprintf(nombre,"%s",c[i]);
  107.     insertar3(actual,i,nombre);  
  108.        
  109.        
  110. }
  111. }
  112.  
  113. void ver(Nodo *actual)
  114. {
  115.         system("cls");
  116.   while (actual != NULL)
  117.   {
  118.                 printf("\n\nDia: %s\n",actual->nombre);
  119.                 //printf("El dato:  %i\n",actual->dato);
  120.         actual = actual->proximo;
  121.   }
  122. }
  123.  
  124.  
  125.  
  126.  
  127. int insertar3(Nodo* actual, int valor, char *name)
  128. {
  129.         Nodo *nuevo, *anterior;
  130.     while (actual != NULL)
  131.    {
  132.         anterior = actual;
  133.         actual = actual->proximo;
  134.     }
  135.     nuevo = (Nodo *) malloc(sizeof(Nodo));
  136.     if (nuevo == NULL)
  137.         return FALSE;
  138.     nuevo->dato = valor;
  139.         nuevo->nombre[0]='\0';
  140.         strcat(nuevo->nombre,name);
  141.     nuevo->proximo = actual;
  142.     anterior->proximo = nuevo;
  143.     return TRUE;
  144. }
  145.  
  146.  
  147. //---------------------------------------------------
  148. //---------------------------------------------------
  149. //SUPUESTAS FUNCIONES PARA LA SUPESTA SUB LISTA
  150. //---------------------------------------------------
  151. //---------------------------------------------------
  152.  
  153.  
  154. void crearlista(SubNodo* actual1)
  155. {
  156.         int i;
  157.         char c[7][30]={"Nose porque se remplaza","julio",abril","junio","noviembre","febrero","enero"}; // vector de caracteres osea es una matriz de 2 dimensiones
  158.       char nombre[20];
  159.  
  160.     for(i=0; i<7; i++)
  161.  
  162.     {
  163.    
  164.     sprintf(nombre,"%s",c[i]);
  165.     CrearNodo(actual1,i,nombre);  
  166.        
  167.        
  168. }
  169. }
  170. void ver(SubNodo *actual1)
  171. {
  172.         system("cls");
  173.   while (actual1 != NULL)
  174.   {
  175.                 printf("\n\nDia: %s\n",actual1->nombre);
  176.                 //printf("El dato:  %i\n",actual->dato);
  177.         actual1 = actual1->proximo;
  178.   }
  179. }
  180.  
  181.  
  182. //aca estoy perdida..esto realmente creo que esta mal
  183. int CrearNodo( SubNodo* sig,int valor, char *name)
  184. {
  185.   SubNodo* nueo;
  186.   SubNodo* actual1;//puntero que se utiliza para recorrer la lista
  187.   SubNodo* anterior;
  188.  
  189.   actual1=sig;
  190.  
  191.   //recorremos la lista, hasta llegar a NULL
  192.   while(actual1 != NULL)
  193.   {
  194.     anterior=actual1;
  195.     actual1=actual1->proximo;//apuntamos al siguiente nodo
  196.   }
  197.  
  198.   //cuando hemos llegado al NULL, se añade el nuevo nodo
  199.   nueo=(SubNodo*)malloc(sizeof(SubNodo));
  200.   //si es que no hay memoria, retornamos
  201.   if (nueo==NULL)
  202.   {
  203.     return FALSE;
  204.   }
  205.  
  206.   nueo->dato = valor;
  207.         nueo->nombre[0]='\0';
  208.   strcat(nueo->nombre,name);
  209.     nueo->proximo = actual1;
  210.     anterior->proximo = nueo;
  211.     return TRUE;
  212.  
  213.  
  214. }
  215.  



Ojala me puedan ayudar es importante y me esforzado para hacer lo que tengo..

Saludos