Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-05-2005
Avatar de davitcito
davitcito davitcito is offline
Miembro
 
Registrado: mar 2005
Posts: 28
Poder: 0
davitcito Va por buen camino
Arreglo y Listas Enlazadas

Saludos muchachos, tengo un problemilla, y es que no se como podría implementar un arreglo en el cual cada casilla de este arreglo contenga una lista enlazada. Por ejm, tengo este problema,
"Crear un arreglo de clientes en el cual cada casilla contenga una lista enlazada de acuerdo al servicio que se le presta (Telefono Fijo, Telefono Móvil, Cable). Además, c/u tiene sus atributos cód de servicio, nombre del titular, monto a pagar y descuento"
Bueno, espero me puedan ayudar, saludos.
__________________
Tengo que pasar .... y lo voy a lograr.
Responder Con Cita
  #2  
Antiguo 27-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
¿Puedes usar TobjectList??

Código Delphi [-]
var p : array [0..100] of TobjectList
Si puedes hacerlo así, busca por el foro el colega TobjectList

Si no puedes, tendrás que hacerlo todo a mano:
Código Delphi [-]
var p : array [0..100] of Pointer
Y ahora andar creando la lista enlazada a golpe de New(nuevaVariable);

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 27-05-2005
Avatar de davitcito
davitcito davitcito is offline
Miembro
 
Registrado: mar 2005
Posts: 28
Poder: 0
davitcito Va por buen camino
Claro de esto ultimo se trata, hacerlo un arreglo de nodos, y que de cada nodo salga una lista enlazada. Lo q no entiendo muy bien es como enlazar los nodos del arreglo con sus listas enlazadas.

EDIT: Comenzar con este encabezado sería factible?

interface
type
pServicios = ^nodoServicios;

nodoServicios = record
info: string;
pSig: pServicios;
end;

cClientes = Class
pClientes: Array[1..100] of pServicios;
inicio: pServicios;
Constructor Crea;
__________________
Tengo que pasar .... y lo voy a lograr.

Última edición por davitcito fecha: 27-05-2005 a las 20:19:32.
Responder Con Cita
  #4  
Antiguo 28-05-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
Hola davitcito,

usa el estilo Delphi, para que tu codigo se entienda mejor.

Te recomendaria usa el TList, para no limitarte al numero de servicios. Puedes hacer algo asi:

Código Delphi [-]
type

  nodoServicios = record
    nombre: string;
    masinfo: string;
  end;
  pServicios = ^nodoServicios;

  Servicios: TList;   // o TThreadList;


luego para crear la lista o ingresar usuarios, haces:

Código Delphi [-]

var
  Servicio: pServicios
begin
  new(Servicio);
  Servicio.info := "algo";
  Servicio.masinfo := "algo mas";
  Servicios.Add(Servicio);

lo mismo puedes hacer con la lista de clientes, en donde uno de los atributos es la lista de servicios.

En realidad, el TThreadList lo podes usar para la lista de clientes y el TList para la lista de servicios

Suerte
__________________
[Crandel]
Responder Con Cita
  #5  
Antiguo 30-05-2005
Avatar de davitcito
davitcito davitcito is offline
Miembro
 
Registrado: mar 2005
Posts: 28
Poder: 0
davitcito Va por buen camino
Gracias por el dato, el problema es q aun no usamos el TList, por lo q no entiendo muy bien como funciona, mas bien mi pregunta va a como puedo unir el arreglo de nodos (cada elemento) con una lista enlazada. Es decir, cual sería el código a usar. Espero me ayuden. Gracias.
__________________
Tengo que pasar .... y lo voy a lograr.
Responder Con Cita
  #6  
Antiguo 30-05-2005
Avatar de davitcito
davitcito davitcito is offline
Miembro
 
Registrado: mar 2005
Posts: 28
Poder: 0
davitcito Va por buen camino
Gracias por el dato, el problema es q aun no usamos el TList, por lo q no entiendo muy bien como funciona, mas bien mi pregunta va a como puedo unir el arreglo de nodos (cada elemento) con una lista enlazada. Es decir, cual sería el código a usar. Espero me ayuden. Gracias.
__________________
Tengo que pasar .... y lo voy a lograr.
Responder Con Cita
  #7  
Antiguo 30-05-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
muy parecido:

Los servicios declaralos como vos decias
Código Delphi [-]
Servicios: Array[1..100] of pServicios;

en mi ejemplo reemplazá el Servicios.Add(Servicio); por

Código Delphi [-]
Servicios[1]= Servicio;

suerte
__________________
[Crandel]
Responder Con Cita
  #8  
Antiguo 30-05-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
Recuerda que los elementos elementos creados con "new" despues depues deben ser eliminados con "Dispose".
__________________
[Crandel]
Responder Con Cita
  #9  
Antiguo 30-05-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
si te da error haciendo

Servicio.info := "algo";

proba con esta línea

Servicio^.info := "algo";

me entro la duda.

Probá
__________________
[Crandel]
Responder Con Cita
  #10  
Antiguo 31-05-2005
mminorm mminorm is offline
Miembro
 
Registrado: may 2005
Posts: 23
Poder: 0
mminorm Va por buen camino
Me imagino ke lo ke necesitas es implementar todo a mano, es algo complicado de explicar todo por aki, pero mas o menos t dare la idea:
Primero declaras la lista, luego le dices al vector ke sera de n cantidad de campos y ke cada campo sera un salto a la lista ke declaraste, por ejemplo:

Tlista = record
.
{declaracion de los datos para el registro de la lista}
.
End;

LMilista= ^Nodo;{declaracion de la lista}
Nodo=record
info:Tlista;
Sig,Ant:LMilista;
End;

Tvectorlista=record{declaracion de un registro ke tendra cada posicion del vector y ke adema tendra el salto a la lista}
salto:LMilista;
End;

Elementos:Array[1..X] of Tvectorlista;{declaración del vector}

End;

asi declaras un vector donde cada campo es un salto a la lista declarada de ahi en adelante lo ke haces es acceder a las diferentes listas ke tienes mediante el subindice del arreglo y luego a la lista. Con esta declaración se facilita todo ya ke para insertar, eliminar, o lo ke sea ke tengas ke hacer, solamente pasas el salto ke tiene cada posición del vector y la tratas como una lista comun y corriente[ejem: insertar(V[n].salto, registro)], eso si acuerdate de inicializar cada salto del vector en nil, porke si no se t arma un problema. Rspero t sirva esta mini explicación de listas salteadas cualkier cosa me escribes

Última edición por mminorm fecha: 31-05-2005 a las 08:58:48.
Responder Con Cita
  #11  
Antiguo 31-05-2005
Avatar de davitcito
davitcito davitcito is offline
Miembro
 
Registrado: mar 2005
Posts: 28
Poder: 0
davitcito Va por buen camino
Buenas, ante todo gracias a ambos por atender mi consulta, ahora con respecto a la última, tengo una duda, ¿para qué vuelvo declaro estas sentencias:

Cita:
Tlista = record
.
{declaracion de los datos para el registro de la lista}
.
End;
No sería suficiente solo con esto?
Cita:
LMilista = ^Nodo //vendría a ser el puntero

Nodo = record
info:Tlista; //porque info TLISTA? No lo podría poner como un string?
Sig,Ant:LMilista;
end;
Bueno, y esta última parte si me queda mas o menos claro:

Cita:
Tvectorlista = record
salto:LMilista; //¿Cómo lo usaría??
end;
Finalmente el arreglo lo declaro en una clase (tal cual me han pedido)

Cita:
Elementos:Array[1..X] of Tvectorlista;
End;
Bueno, mminorm espero me puedas ayudar con las dudas que tengo, y no estar ocasionando muchas molestias tambien. Gracias.
__________________
Tengo que pasar .... y lo voy a lograr.
Responder Con Cita
  #12  
Antiguo 01-06-2005
mminorm mminorm is offline
Miembro
 
Registrado: may 2005
Posts: 23
Poder: 0
mminorm Va por buen camino
Lo unico que hice con eso fue declarar el registro ke tendr[a el nodo, segun tu consulta el nodo no tendra unicamente un dato si no varios, veo mas facil trabajar con un registro y luego declarar una variable del tipo del registro ., esa es la idea principal de eso. de esa declaracion.

{ejemplo del registro}
Tlista = record
nombre: string[30];
direccion: string[100];
{etc....}
end;


LMilista = ^Nodo //exacto seria tu puntero
Nodo = record
info:Tlista; //porque no creo ke vayas a manejar un solo dato sino varios,
Sig,Ant:LMilista;
end;

Al hacer esto haces un paquete de la informacion ke necesitar para cada nodo, ademas es recomendable utilizar siempre un registro para la informcion ke almacenaras en la lista enlazada. aunke sea un solo dato

Con el uso de la lista es muy facil, tenes ke ver cada posicion del vector como un puente a la lista, de esta manera solamente tenes ke hacer un TDA para la lista ke contiene cada posicion del vector, de esta manera podes hacer lo siguiente(asumo ke sabes ke es un TDA):

var
Tvectorlista: V:
.
.
codigo
.
.
evento click de un boton.......
begin
insertar(V[i].salto,reg) {donde reg es un registro de tipo Tlista. Nota tambien ke insertar recibe 2 parametros la lista y un registro}
end;

Recuerda ke cada vez ke vas a insertar un nodo en la lista tenes ke declarar un registro de tipo Tlista.

Asi se usa, ahora bien nota ke la verdadera lista esta en el salto ke contiene el vector no en el vector mismo, de esta manera estas manejando una lista comun y corriente, no t hagas bolas con lo del vector ke eso no es nada es solo un puente. Cualkier cosa estamos en contacto

Última edición por mminorm fecha: 01-06-2005 a las 08:25:41.
Responder Con Cita
  #13  
Antiguo 01-06-2005
mminorm mminorm is offline
Miembro
 
Registrado: may 2005
Posts: 23
Poder: 0
mminorm Va por buen camino
Davit lei tu correo, mira con el codigo ke t di enlazas cada casilla del arreglo a una lista, asi es como enlazas una lista diferente a cada casilla del arreglo:

Tlista = record //registro para el nodo
nombre: string[30];
direccion: string[100];
{etc....}
end;


LMilista = ^Nodo //tu puntero(lista enlazada)
Nodo = record
info:Tlista;
Sig,Ant:LMilista;
end;

Tvectorlista = record //registro ke se convertira en el tipo de tu vector y ke contiene el salto a tu lista
salto:LMilista;
end;


Elementos:Array[1..N] of Tvectorlista; //declaracion del arreglo de n posicion donde cada posicion es de tipo Tvectorlista, y Tvectorlista tiene un salto a tu lista.

Luego declaras una variable de tipo Elementos y un registro de tipo Tlista para la informacion ke tendras ke guardar en cada nodo:

Var
Elementos: Tuarreglo;
Tlista:Turegistro;

Y eso es todo

Última edición por mminorm fecha: 01-06-2005 a las 08:39:05.
Responder Con Cita
  #14  
Antiguo 01-06-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Yo reorganizaba las cosas un poquito, No sé si os gustará.

Código Delphi [-]
type
pNodo = ^Nodo // Puntero a un nodo
Nodo = record
 OtraInformacion:String[255];
 
 Sig,AntNodo;
end;

TCliente = record //registro para el nodo
 Lista Nodo;//aqui tenemos ya el puntero.
 nombre: string[30];
 direccion: string[100];
 {etc....}
end;

TvectorCliente = Array[1..N] of TCliente;

Para acceder:
Código Delphi [-]
var  vector:TvectorCliente;
begin
  vector[1].nombre := 'pepe';
  new(vector[1].Lista); // creamos el primer nodo para este cliente
  vector[1].Lista^.OtraInformacion := ' pues eso';
  new(vector[1].Lista^.Sig); // creamos un nuevo nodo para el cliente 1
end;

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 01-06-2005 a las 10:27:13.
Responder Con Cita
  #15  
Antiguo 01-06-2005
Avatar de davitcito
davitcito davitcito is offline
Miembro
 
Registrado: mar 2005
Posts: 28
Poder: 0
davitcito Va por buen camino
Bueno, vaya, ahora si que se han pulido gracias mminorm & Lepe por todo, y en general gracias a todos, me ha quedado muy en claro. Da gusto consultar en este foro, pues siempre hay personas dispuestas a ayudar

Saludos.
__________________
Tengo que pasar .... y lo voy a lograr.

Última edición por davitcito fecha: 01-06-2005 a las 16:12:05.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 22:45:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi