FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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. |
#2
|
||||
|
||||
¿Puedes usar TobjectList??
Si puedes hacerlo así, busca por el foro el colega TobjectList Si no puedes, tendrás que hacerlo todo a mano: 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. |
#3
|
||||
|
||||
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. |
#4
|
||||
|
||||
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:
luego para crear la lista o ingresar usuarios, haces:
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] |
#5
|
||||
|
||||
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. |
#6
|
||||
|
||||
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. |
#7
|
||||
|
||||
muy parecido:
Los servicios declaralos como vos decias
en mi ejemplo reemplazá el Servicios.Add(Servicio); por
suerte
__________________
[Crandel] |
#8
|
||||
|
||||
Recuerda que los elementos elementos creados con "new" despues depues deben ser eliminados con "Dispose".
__________________
[Crandel] |
#9
|
||||
|
||||
si te da error haciendo
Servicio.info := "algo"; proba con esta línea Servicio^.info := "algo"; me entro la duda. Probá
__________________
[Crandel] |
#10
|
|||
|
|||
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. |
#11
|
||||
|
||||
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:
Cita:
Cita:
Cita:
__________________
Tengo que pasar .... y lo voy a lograr. |
#12
|
|||
|
|||
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. |
#13
|
|||
|
|||
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. |
#14
|
||||
|
||||
Yo reorganizaba las cosas un poquito, No sé si os gustará.
Para acceder:
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. |
#15
|
||||
|
||||
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. |
|
|
|