elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Anidar una lista enlazada dentro de otra en C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Anidar una lista enlazada dentro de otra en C.  (Leído 11,914 veces)
samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Anidar una lista enlazada dentro de otra en C.
« 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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct Articulo {
  5.       int numero;
  6.       int numero2;
  7.       struct Articulo *sig;
  8.      }TLista;
  9.  
  10. typedef struct nodo_art {
  11.         int codigo;
  12.         TLista *primero;
  13.         struct nodo_art *sig;
  14.        }lista;
  15.  
  16. int add_nod(lista **first,int a,int b,int c){
  17. lista *nuevo,*aux;
  18. TLista *nuevonum,*aux2;
  19. nuevo = (lista *) malloc (sizeof(lista));
  20. nuevonum = (TLista *) malloc (sizeof(TLista));
  21. nuevo->codigo = a;
  22. nuevo->sig = NULL;
  23. nuevo->primero = NULL;
  24.  
  25.  
  26. nuevonum->numero = b;
  27. nuevonum->numero2 = c;
  28. nuevonum->sig = NULL;
  29.  
  30.   if(nuevo->primero == NULL){
  31.             nuevo->primero = nuevonum;
  32.            } else {
  33.               aux2 = nuevo->primero;
  34.               while(aux2->sig != NULL){
  35.                 aux2 = aux2->sig;
  36.                }
  37.               aux2->sig = nuevonum;
  38.              }
  39.  
  40. if(*first == NULL){
  41.             *first = nuevo;
  42.            } else {
  43.               aux = *first;
  44.               while(aux->sig != NULL){
  45.                 aux = aux->sig;
  46.                }
  47.               aux->sig = nuevo;
  48.              }
  49. }
  50.  
  51.  
  52. int see_list(lista *first){
  53. lista *aux;
  54.  
  55. if(first == NULL){return -1;}
  56. while(aux != NULL){
  57.  printf("%d- %d %d\n",aux->codigo,aux->primero->numero,aux->primero->numero2);
  58.  aux = aux->sig;
  59. }
  60. }
  61.  
  62.  
  63. int main(){
  64.    lista *first;
  65.    first = NULL;
  66.  
  67.    add_nod(&first,5,3,5);
  68.    add_nod(&first,3,2,7);
  69.  
  70.    add_nod(&first,4,3,2);
  71.    see_list(first);
  72.    getchar();
  73. }
  74.  
  75.  
Un saludo y gracias por todo.


En línea

Sauruxum

Desconectado Desconectado

Mensajes: 117


Ver Perfil WWW
Re: Anidar una lista enlazada dentro de otra en C.
« Respuesta #1 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


En línea

jessec01

Desconectado Desconectado

Mensajes: 5


inonvar


Ver Perfil
Re: Anidar una lista enlazada dentro de otra en C.
« Respuesta #2 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();
}
//““““““““““““““““““““““““““““““““““““““““““““““““““““““““““

En línea

"originalidad en todo "
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
una lista circular doblemente enlazada en c sharp c#
.NET (C#, VB.NET, ASP)
neo_angel_xxx 2 9,011 Último mensaje 29 Octubre 2010, 01:48 am
por [D4N93R]
[Solucionado] Problema con lista enlazada en C (buffer de entrada) « 1 2 »
Programación C/C++
xassiz~ 12 10,072 Último mensaje 21 Febrero 2011, 22:22 pm
por xassiz~
Problema con lista enlazada
Programación C/C++
Lain0x 2 3,416 Último mensaje 8 Julio 2011, 13:20 pm
por Valkyr
Ayuda con lista enlazada
Java
netca 2 3,166 Último mensaje 20 Abril 2012, 16:11 pm
por adwind
Ayuda Lista Enlazada
Programación C/C++
robluis 5 5,425 Último mensaje 9 Mayo 2012, 03:49 am
por botella
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines