¿Debo acceder a un registro de una lista enlazada que apunta a otra lista y que de la segunda lista cuelga otra (o sea leer el registro de la 3ra lista) y no sé cómo hacer?
1 Respuesta
Respuesta de villalvilla
1
1
villalvilla, -experto en bases de datos con oracle
Sería algo así, ¿no?: Reg1-->OtroReg11-->OtroReg12 | | reg2-->OtroReg21-->OtroReg22 1.vamos a definir para empezar los tipos de los registros: TYPE TOtraLista=^TNodoOtraLista; TNodoOtraLista=RECORD ValorCampo1:String[10]; ValorCampo2:String[10]; Siguiente:TOtraLista; End; TListaAtt = ^TNodoAtt; TNodoAtt = RECORD ValorCampo : String[10]; Siguiente : TListaAtt; OtraLista:TOtraLista; END; 2. Vamos al meollo del asuntillo! Tu problema es que no direccionas bien los datos, ¿no? Bueno, vamos a la zona de definición de variables: VAR MiLista:TListaAtt; MiOtraLista:TOtraLista; MiVarRecorrer:TOtraLista; (*Usaremos esta última variable para direccionar el registro interno al que tú no puedes acceder*) BEGIN New(MiLista);(*Con esto inicializamos el registro dinámico que cuelga del puntero MiLista*) (*Cargamos los datos de MiLista*) MiLista^.ValorCampo:="hola"; MiLista^.Siguiente:=NIL; New(MiOtraLista); MiLista^.OtraLista:=MiOtraLista; MiOtraLista^.ValorCampo1:="Campo1"; MiOtralista^.ValorCampo2:="Campo2"; (*Ahora recorremos MiLista para solventar tu problema. Te recomiendo siempre el uso de 1 variable auxiliar del tipo puntero al registro que quieras acceder para que no te líes. Siempre divide y vencerás! *) MiVarRecorrer:=MiLista^.OtraLista; (*MiVarRecorrer direcciona ahora al registro apuntado por el campo OtraLista del puntero MiLista. Así de fácil. Ahora con poner MiVarRecorrer^. ValorCampo1 puedes acceder a ese valor*) writeln(MiVarRecorrer^.ValorCampo1); END; 3.Espero que te haya aclarado tu problema. Si sigues teniendo dudas, hazte un dibujillo con los registros como te he hecho yo al principio de esta respuesta y vas haciendo el seguimiento de lo que vas haciendo con el paso a paso del pascal.
Ok todoexperta! Vamos por partes... ¿Qué estructura de datos alberga todo eso que me comentas? Espero tu respuesta para poder responderte al caso concreto. Supongo que será un record con 2 punteros dentro... pero mejor que me lo especifiques y te comento, ¿ok? 1 saludo, -Villalvilla-