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 06-04-2006
fede7 fede7 is offline
Registrado
 
Registrado: jun 2005
Posts: 9
Poder: 0
fede7 Va por buen camino
Operaciones basiscas listas doblemente enlazadas circulares

Hola, me haria un gran favor si alguien me facilitara el codigo de todas las operaciones que hay.

Tengo que hacer una parte de una practica con estas listas y no encuentro las operaciones por ningun lado para poder continuarla.

De paso tengo otra consulta. En delphi al poner un tMemo para que muestre un listado hay alguna manera para recalcar en negrita los campos que yo creo? Nombre: que aparezca en negrita.

Saludos y gracias
Responder Con Cita
  #2  
Antiguo 06-04-2006
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Cita:
Empezado por fede7
Tengo que hacer una parte de una practica con estas listas y no encuentro las operaciones por ningun lado para poder continuarla.
Apostaría que el objetivo de unas prácticas (de implantación de algoritmos) es conseguir que el alumno las resuelva por sí mismo y no "fusilándolas" de código de otros, pero tampoco es cuestión de criticar si quieres o no aprovecharlas... Así pues:

http://www.google.es/search?hl=es&q=...n+Google&meta=

Con una revisión superficial, comprobarás que en las cuatro primeras entradas ya tienes código para implantar las listas doblemente enlazadas. Un poco de picardía con Google no te hubiese venido mal

Saludos
Responder Con Cita
  #3  
Antiguo 06-04-2006
fede7 fede7 is offline
Registrado
 
Registrado: jun 2005
Posts: 9
Poder: 0
fede7 Va por buen camino
Hola,

las operaciones basicas por ejemplo las de los arboles o de la tabla hash las saque de apuntes de clase de otros años (las daban y explicaban) por lo tanto no fusilo nada, no crees??. Las operaciones de listas doblemente enlazadas si que las tengo y como bien dices, en google buscando salen (ya busque y requetebusque antes de poner mi duda,). El caso que no se bien la diferencia cuando es circular en cuanto a los procedimientos de las operaciones y por eso buscaba dichas operaciones que tampoco creo que sea tan grave, ni que pidiera el alta de un cd ya hecha ;-). De doblemente enlazada a doblemente enlazada circular la diferencia donde reside en las operaciones?? En los tipos se la diferencia y se que son ambas listas pero siempre nos piden doblemente enlazada, lo de circular nunca lo explican.

un saludo y gracias por tu ayuda

Última edición por fede7 fecha: 06-04-2006 a las 14:27:29.
Responder Con Cita
  #4  
Antiguo 06-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Por circular, creo entender que se muerde la cola

Es decir, el último elemento apunta al primero de la lista, así que hay que saber de antemano cuantos elementos hay en la lista para realizar una búsqueda.

En listas (no circulares) simplemente haces un bucle hasta que aux^.siguiente = nil. Suponiendo que "siguiente" es un puntero al siguiente elemento de la lista, el último elemento tendrá nil (puntero nulo, vacío) y por tanto se tiene una condición de parada.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 06-04-2006
fede7 fede7 is offline
Registrado
 
Registrado: jun 2005
Posts: 9
Poder: 0
fede7 Va por buen camino
Código Delphi [-]
 
type
 
  tElem = char; {o lo que corresponda}
  tLista = ^tNodo;
  tNodo = record
               anterior: tLista
               contenido: tElem;
               siguiente: tLista
             end;

Osea que los tipos de la lista doblemente enlazada circular y la no circular son iguales, no?

Saludos y gracias


Responder Con Cita
  #6  
Antiguo 06-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Exacto.

Lo que cambia es la filosofía de trabajo, vamos a Buscar un elemento concreto:

- No circular
Recorremos desde el principio hasta que aux^.siguiente = nil. Si no encontramos lo que buscamos, paramos.

- Circular.
Ahora todos los aux^.Siguiente tienen un valor, ya que el último de la lista apunta al primero. La condición de parada no la podemos usar, entonces ¿como sabemos que hemos recorrido todos los elementos?

Cada vez que se añade/borra un elemento a la lista, incrementamos/decrementamos un contador, y ya podemos hacer: For i:=1 to contador do

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 06-04-2006
fede7 fede7 is offline
Registrado
 
Registrado: jun 2005
Posts: 9
Poder: 0
fede7 Va por buen camino
Vale, creo que lo voy pillando. Era justo la mayor duda que tenia. Me va a tocar sufrir de lo lindo, eso esta claro.

Gracias por tus ayudas!!

Saludos
Responder Con Cita
  #8  
Antiguo 06-04-2006
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Cita:
Empezado por fede7
El caso que no se bien la diferencia cuando es circular en cuanto a los procedimientos de las operaciones y por eso buscaba dichas operaciones que tampoco creo que sea tan grave, ni que pidiera el alta de un cd ya hecha ;-).
Tampoco mi respuesta fue tan ofensiva. Además tu petición inicial fue (y cito):

Cita:
Empezado por fede7
Hola, me haria un gran favor si alguien me facilitara el codigo de todas las operaciones que hay.
No veo por ningún lado que pidas que se te explique la diferencia entre unas listas y otras, lo que pides es el código.

Así pues, si te sientes ofendido, lo siento, pero yo no invento nada, lo que pediste está escrito.
Responder Con Cita
  #9  
Antiguo 06-04-2006
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Cita:
Empezado por Lepe
- Circular.
Ahora todos los aux^.Siguiente tienen un valor, ya que el último de la lista apunta al primero. La condición de parada no la podemos usar, entonces ¿como sabemos que hemos recorrido todos los elementos?
Por ejemplo con un flag (añadiendo también un método en la lista para reiniciar el flag de todos los elementos)

O también con punteros "fijos" al primer y último elemento (caso de utilizarse estructuras dinámicas)

Saludos.
Responder Con Cita
  #10  
Antiguo 06-04-2006
reina reina is offline
Miembro
 
Registrado: ago 2005
Ubicación: Capital Federal-La Plata (Bs As)
Posts: 147
Poder: 19
reina Va por buen camino
Hola! tanto listas doblemente enlazadas circulares o no..podes guardar el 1er elemento y el ultimo. Asi sabrias en la circular la condicion de fin de la lista es cuando llegue al primero..En cuanto a la implementación lo podrias implementar con punteros o array de registros guardas: sig, ant, dato, donde sig y ant son posiciones aleatorias del array...donde tienen un orden logico..pero no fisico . Con respectos a las operaciones pueden ser:
- Crear Lista.
- Recorrer e imprimir la lista.
- Obtener primero
- Obtener Ultimo.
- Insertar en una posicion.
- Agregar.
- Borrar un elemento determinado.
- Borrar un elemento de una posicion.
- Si es vacia.
- Cantidad de Elementos.
etc..
Exitos con las estructuras de datos!

LA PATRIA SERA LIBRE!
Responder Con Cita
  #11  
Antiguo 06-04-2006
fede7 fede7 is offline
Registrado
 
Registrado: jun 2005
Posts: 9
Poder: 0
fede7 Va por buen camino
Cita:
Empezado por kinobi
Tampoco mi respuesta fue tan ofensiva. Además tu petición inicial fue (y cito):


No veo por ningún lado que pidas que se te explique la diferencia entre unas listas y otras, lo que pides es el código.

Así pues, si te sientes ofendido, lo siento, pero yo no invento nada, lo que pediste está escrito.
Perdona si sone a ofendido, para nada . Si acato las criticas, solo te explicaba el porque las pido. Logicamente es mejor saber hacerlas pero como no se las pido si alguien las tiene y me las quiere dejar sino no pasa nada. Y dado que las operaciones a mi me las explican en clase por eso no considero fusilar algo que te dan, lo que pasa que mis apuntes solo tienen el Insertar circular. Bueno la de crearlo es muy facil y se.

No pido que se me explique las diferencias porque esperaba con el codigo en mano compararlo con las doblemente enlazadas y yo mismo ver las diferencias. No pregunto algo que puedo averiguar, igual la forma de averiguarlo no es la mas adecuada pero que le vamos a hacer, nadie es perfecto y de hecho asi comparo las operaciones de las listas simples y las enlazadas por ejemplo.

Cita:
Empezado por kinobi
Por ejemplo con un flag (añadiendo también un método en la lista para reiniciar el flag de todos los elementos)

O también con punteros "fijos" al primer y último elemento (caso de utilizarse estructuras dinámicas)

Saludos.
Tomo nota, gracias

Cita:
Empezado por reina
Hola! tanto listas doblemente enlazadas circulares o no..podes guardar el 1er elemento y el ultimo. Asi sabrias en la circular la condicion de fin de la lista es cuando llegue al primero..En cuanto a la implementación lo podrias implementar con punteros o array de registros guardas: sig, ant, dato, donde sig y ant son posiciones aleatorias del array...donde tienen un orden logico..pero no fisico . Con respectos a las operaciones pueden ser:
- Crear Lista.
- Recorrer e imprimir la lista.
- Obtener primero
- Obtener Ultimo.
- Insertar en una posicion.
- Agregar.
- Borrar un elemento determinado.
- Borrar un elemento de una posicion.
- Si es vacia.
- Cantidad de Elementos.
etc..
Exitos con las estructuras de datos!
Gracias por tu consejo. Ya que estoy, Si me piden modificar un dato que operaciones tengo que implementar?
Que borre un elemento determinado y lo vuelva a insertar nuevo??

Saludos y nuevamente gracias a todos
Responder Con Cita
  #12  
Antiguo 07-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Si te piden modificar.... se supone que tienes que modificar el contenido de Telem, por tanto solo tienes que buscar y despues sobreescribir el Telem, es decir, operaciones de punteros.... ninguna

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #13  
Antiguo 07-04-2006
fede7 fede7 is offline
Registrado
 
Registrado: jun 2005
Posts: 9
Poder: 0
fede7 Va por buen camino
Es que por ejemplo con arboles la operacion modificar la tenfo implementada entonces lo que hago es meter los datos y modificarlos y si la clave la cambio (deja cambiarla) lo que hago es eliminar el arbol y crearlo de nuevo.

Entonces con lista circular uso la operacion buscarnodo y directmanete pense en borrar ese nodo y volverlo a crear por lo que los datos serian modificados.

Perdona mi ignorancia pero como sobreescribirias el los datos??

Saludos y gracias
Responder Con Cita
  #14  
Antiguo 07-04-2006
reina reina is offline
Miembro
 
Registrado: ago 2005
Ubicación: Capital Federal-La Plata (Bs As)
Posts: 147
Poder: 19
reina Va por buen camino
Claro..como dice el compañero. Accedes al elemento a modificar(buscas el nodo) y modificas el dato.. aux^.dato:=..., o borrado seguido de inserccion como te guste mas.
saludoss

LA PATRIA SERA LIBRE!
Responder Con Cita
  #15  
Antiguo 07-04-2006
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Cita:
Empezado por fede7
No pido que se me explique las diferencias porque esperaba con el codigo en mano compararlo con las doblemente enlazadas y yo mismo ver las diferencias. No pregunto algo que puedo averiguar, igual la forma de averiguarlo no es la mas adecuada pero que le vamos a hacer, nadie es perfecto y de hecho asi comparo las operaciones de las listas simples y las enlazadas por ejemplo.
Bueno, pues todo aclarado

Y si es necesario explicar las diferencias entre los tipos de listas se explican, que aquí encontrarás a muchos dispuestos a hacerlo. Además, estos temas genéricos de algoritmos y programación son siempre muy interesantes.

Un saludo.
Responder Con Cita
  #16  
Antiguo 07-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Interesante y útiles. Cuando empecé a trabajar con delphi y vi la clase TList, me sorprendió que usara punteros a diestro y siniestro, pero en lugar de asustarme, la estudié a fondo. El tema de punteros me gustó mucho en la carrera jejeje.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #17  
Antiguo 07-04-2006
fede7 fede7 is offline
Registrado
 
Registrado: jun 2005
Posts: 9
Poder: 0
fede7 Va por buen camino
Cita:
Empezado por reina
Claro..como dice el compañero. Accedes al elemento a modificar(buscas el nodo) y modificas el dato.. aux^.dato:=..., o borrado seguido de inserccion como te guste mas.
saludoss

LA PATRIA SERA LIBRE!
Oks!!! segure vuestros consejos y ya os contare que sale

Tengo alguna duda mas ahora mismo sobre otros temas (pero son minucias), que es mejor abrir otro post o preguntarlas en este mismo??

Saludos y gracias a todos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Arreglo y Listas Enlazadas davitcito Varios 14 01-06-2005 16:01:57
Pila con Listas enlazadas (problema con apuntadores) desve Varios 2 30-03-2005 10:07:47
listas doblemente enlazadas Luli OOP 1 19-11-2004 15:41:24
Referencias circulares aparentes con SPs mlara Firebird e Interbase 6 06-07-2003 16:29:19


La franja horaria es GMT +2. Ahora son las 16:30:28.


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