Título: Anidar una lista enlazada dentro de otra en C. Publicado por: samur88 en 25 Enero 2011, 18:44 pm Hola muy buenas.
Tengo una duda sobre si es posible anidar listas enlazadas, es decir una lista enlazada por cada nodo que cree de otra lista enlazada. He hecho un código, parece funcionar, pero solo me muestra el ultimo nodo insertado, dejo el código aquí puesto por si podeís ayudarme a corregir los posibles errores que pueda a ver o si no es posible anidar una lista dentro de otra. Código Un saludo y gracias por todo. Título: Re: Anidar una lista enlazada dentro de otra en C. Publicado por: Sauruxum en 25 Enero 2011, 21:33 pm Yo diria que para poner una lista anidada de ese modo hacer como sucede en las matrices: hacer una lista ( que seria la clave principal ) y que contenga solo un puntero y que cada uno de esots punteros apunte a una nueva lista.
Asi si quieres acceder a las listas anidadas, primero tendras que acceder a la lista principal y de ahi acceder normalmente a los elementos de la lista correspondiente. Asi decirlo no suena dificil ( quiza no lo es ), dejame hecharle un ojo al codigo con todo. Saludos Título: Re: Anidar una lista enlazada dentro de otra en C. Publicado por: jessec01 en 4 Noviembre 2016, 22:42 pm :laugh:
como anidar una lista copie tu código lo probé verifique los detalles tu codigo esta bien lo unico que tiene malo es que no tiene un inicio y ultimo y hay cosas que estaban de mas y tambien no estaba guardando los datos en la siguiente lista sino que se gurdaba en la misma y se reasignaba otra vez y llegué a la conclusión a como anidar una lista correctamente Este aporte lo hago también ya que es un tema muy complejo y hay poca información!! // lista typedef struct producto { char nombre[300]; int cantidad[3]; float precio[3]; char marca[3][700]; struct producto *sig; }pro; //lista anidada typedef struct carrito { pro *primer; // el nombre y luego el puntero para acceder a la lista struct carrito *sig; }car; car *inicio,*ultimo2; // para tener mas control en la lista // crear //funcion // la lista debe estar llena void crear(pro *prim ,int *dato,int opc)// int dato y opc no es necesario { ///////////////// pro *inicio2; pro *ultimo3; ///////////////// inicio2=(pro *)NULL; ultimo3=(pro *)NULL; ////////////////////// pro *aux,*actul; ////////////////////// car *aux2; int *nu_dat; nu_dat=dato; char dato2[50]; int n; /////////////////////// pro *princi; princi=prim; ////////////////////////////// aux=(pro *) malloc(sizeof(pro)); aux2=(car *) malloc(sizeof(car)); ///////////////////////////// if(aux==NULL && aux2==NULL) { printf("no hay memoria disponible"); }//actul recibe segun opc la direcion que contiene /////////////////////////////// actul=posicion(princi,opc);//la lista cuando opc Ej:opc=1 aux->cantidad[0]++;//cada vez que entra al menu hay un /////////////////// if(dato[1]==0) //producto nuevo {//segun el dato[posicion] se le asina de lista strcpy(aux->nombre,actul->nombre);//a lista anidada strcpy(aux->marca[0],actul->marca[dato[1]]); aux->precio[0]=actul->precio[dato[1]]; //Ej: Alicate lacutre 12.4 se copia a la otra lista anidada } ///////////////////// if(dato[1]==1) { strcpy(aux->nombre,actul->nombre); strcpy(aux->marca[0],actul->marca[dato[1]]); aux->precio[0]=actul->precio[dato[1]]; } ///////////////////// if(dato[1]==2) {strcpy(aux->nombre,actul->nombre); strcpy(aux->marca[0],actul->marca[dato[1]]); aux->precio[0]=actul->precio[dato[1]]; } ////////////////////////// aux2->primer=aux; //se le asigna lo que hay aux a aux->primer aux2->sig=NULL; //donde aux->prime es la istancia de la otra /////////////////// lista aux->sig=NULL; //tanto aux aux NULL para inicializarlo if(inicio==NULL) { ultimo2=aux2; inicio=aux2; } else { ultimo2->sig=aux2; ultimo2=aux2; } //printf("%s",r->primer->nombre); getch(); } //““““““““““““““““““““““““““““““““““““““““““““““““““““““““““ |