Sobre listas enlazadas en tpascal7

¿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
1
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-

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas