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 23-12-2004
marlenezorrilla marlenezorrilla is offline
Registrado
 
Registrado: dic 2004
Posts: 1
Poder: 0
marlenezorrilla Va por buen camino
TList, TQueue, TStack

Me podria alguien decir, para que se usan las componentes TQueue, TStack y TList?.

Es que tengo que preparar una clase sobre esos temas y no tengo idea de su uso.
Responder Con Cita
  #2  
Antiguo 24-12-2004
Ulises_SPI Ulises_SPI is offline
Registrado
 
Registrado: dic 2004
Posts: 2
Poder: 0
Ulises_SPI Va por buen camino
Clases TList, TQueue y TStack

Que tal. Te cuento que las clases TList, TQueue y TStack son estructuras de almacenamiento definidas en Delphi para que no tengas que programarlas. Corresponden a la implementación de una lista vinculada, una cola y una pila, respectivamente. Solo he utilizado el TList, pero creo que el estilo es el mismo en las tres clases (deberías verificarlo).
Con respecto al TList puedo decirte que es una lista hecha con punteros genéricos (pointer) por lo que puedes poner cualquier cosa en la lista, es decir, no necesariamente elementos del mismo tipo en cada uno de los nodos. Lo importante es que sepas que hay en el nodo para poder hacer un cast al objeto antes de recuperar la información almacenada en el nodo de la lista.
La clase TList provee un función de ordenamiento utilizando quicksort, y solamente debes proveerle una función que retorna -1,0 o 1 segun sea un elemento menor, igual o mayor a otro. Todo esto que te cuento esta disponible en el help del delphi, pero si necesitas mas ayuda, avisa. Saludos, Ulises
Responder Con Cita
  #3  
Antiguo 24-12-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Yo si he usado TQueue y TStack, verifico que identico a Tlist en cuanto a creación, difiere en que para añadir debes usar el método Push y para extraer un elemento usar Pop, tambien permite consultar el elemento de la cima, es decir, en el caso de Tqueue sería el primero de la cola, y en el caso de Tstack, el elemento que se halla arriba de la pila; en ambos casos sin necesidad de extraerlo, el método en cuestion se llama Peek.

Por supuesto aqui no tiene sentido ordenar estos objetos.

Código Delphi [-]

type Tlibro = class(Tobject)
private
  Fnombre:String;
public
  property Nombre:String read Fnombre Write Fnombre;
end;

var 
   Libros : TStack;
   libro : Tlibro;
begin
  Libros := TStack.create(true); // creamos la pila

  libro := Tlibro.create; // creamos un objeto libro
  libro.nombre := 'Delphi Maniacs';
  
  libros.push(libro); introducimos el libro en la pila.

end;
Por supuesto no he controlado errores de memoria o de creación... pero basicamente es esto. No te olvides liberar la pila con Libros.Free que automaticamente liberará todos los libros que haya en la pila.

Saludos
Responder Con Cita
  #4  
Antiguo 28-12-2004
Avatar de Edgar++
Edgar++ Edgar++ is offline
Miembro
 
Registrado: dic 2004
Ubicación: Buenos Aires
Posts: 15
Poder: 0
Edgar++ Va por buen camino
Holas!

Esas clases implementan un parte de lo que se conoce como TAD (Tipo Abstracto de Dato), esto es básicamente estructuras de almacenamiento de datos de la vida cotidiana com las pilas de libros o las colas de los cines o las listas de compras implementadas en computación. Existe muchisimos tipos de TAD, otros ejemplos son las tablas de dispersión o Hash, los arboles binarios, listas doblemente enlazadas, grafos, diccionarios, todo tipo de arboles, etc. Cada tipo se utiliza en funcion de lo que se necesite, por ejemplo para búsquedas rápidas conviene usar tablas hash o arboles binarios. No es dificil implementar estos tads, lo que hay que hacer es pensar las funciones primitivas básicas que deben tener para su utilización, aquellas que mediante su combinación se pueden crear otras funcionalidades.

Aca va un tipico ejemplo de como implementar una lista:

Código Delphi [-]
type
   PListItem = ^TListItem;
   TListItem = record
      next: PListItem;
      data: Pointer;
   end;
   TLinkedList = object
      procedure Add(data: Pointer);
      procedure Remove(data: Pointer);
      { otros procedimientos utiles que permitan
         por ejemplo recorrer la lista, etc }
end;
Responder Con Cita
  #5  
Antiguo 29-07-2010
Thoronluin Thoronluin is offline
Miembro
 
Registrado: feb 2009
Posts: 39
Poder: 0
Thoronluin Va por buen camino
Hola a tod@s:

Perdón por mi ignorancia pero estoy intentando crear una cola con Tqueue y encuentro poca información o información errónea.

Tengo un par de preguntas:
  1. Lo que meta el la pila ha de ser una clase no puede ser una variable, por ejemplo un record con varios campos.
  2. ¿Para liberar la memoria bastaría con lo siguiente?

Código Delphi [-]
libro := libros.pop;
libro.free;

Saludos.
Responder Con Cita
  #6  
Antiguo 29-07-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.933
Poder: 27
delphi.com.ar Va por buen camino
Con respecto a la pregunta original, creo que es algo mas simple, todas son clases que implementan las siguientes estructuras de datos:

TList es una lista simple.
TQueue es una pila FIFO (first-in first-out)
TStack es una pila LIFO (last-in first-out)


Saludos!

Cita:
Empezado por Thoronluin Ver Mensaje
Perdón por mi ignorancia pero estoy intentando crear una cola con Tqueue y encuentro poca información o información errónea.
Código Delphi [-]
var
  Q: TQueue;
begin
  Q := TQueue.Create;
  try
    Q.Push(Item);  { Agrega un item a la pila }
    ...
    Item := Q.Pop; { Quita un item y devuelve el mismo }
  finally
    Q.Free;
  end;


Cita:
Empezado por Thoronluin Ver Mensaje
Lo que meta el la pila ha de ser una clase no puede ser una variable, por ejemplo un record con varios campos.
TQuote es un TOrderedList list, y este tipo de listas utilizan punteros, o sea que puedes perfectamente asignar la dirección de un registro.

Cita:
Empezado por Thoronluin Ver Mensaje
¿Para liberar la memoria bastaría con lo siguiente?
Solo liberará el espacio de memoria de la clase, no de sus objetos referenciados, tienes que eliminarlos "manualmente", y puedes usar la misma pila para acceder a ellos.


Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
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 17:42:15.


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