Ver Mensaje Individual
  #12  
Antiguo 18-07-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
santiago14,

Continuación del Msg #11

Revisa estas variantes complementarias al código propuesto en el Msg #2 y que siguen la línea de diversas opciones propuestas en este hilo a tu requerimiento:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Contnrs;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TReg = Record
    Item : String;
    Objeto : String;
  End;

  TPtrLista = ^TLista;

  TLista = Record
    Item : String;
    Objeto : String;
    Next : TPtrLista;
  End;

const
   A1 : Array[0..3] of String = ('Item-1', 'Item-2', 'Item-3', 'Item-4');
   A2 : Array[0..3] of String = ('Objeto-1', 'Objeto-2', 'Objeto-3', 'Objeto-4');

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Gestión de Listas de Datos por medio de Punteros
procedure TForm1.Button1Click(Sender: TObject);
var
   PtrLista, PriLista, UltLista, AuxLista : TPtrLista;
   S1, S2 : String;
   FirstPtr : Boolean;
   i : Integer;

begin

   FirstPtr := True;

   for i := 0 to 3 do
   begin

      New(PtrLista);
      PtrLista^.Item := A1[i];
      PtrLista^.Objeto := A2[i];
      PtrLista^.Next := nil;

      if FirstPtr then
      begin
         PriLista := PtrLista;
         FirstPtr := False;
      end
      else
         UltLista^.Next := PtrLista;

      UltLista := PtrLista;

   end;

   PtrLista := PriLista;

   while PtrLista <> nil do
   begin
      S1 := PtrLista^.Item;
      S2 := PtrLista^.Objeto;
      ShowMessage( S1 + ',' + S2);
      PtrLista := PtrLista^.Next;
   end;

   PtrLista := PriLista;

   while PtrLista <> nil do
   begin
      AuxLista := PtrLista^.Next;
      Dispose(PtrLista);
      PtrLista := AuxLista;
   end;

end;

// Gestión de Listas de Datos por medio de TList y Punteros
procedure TForm1.Button2Click(Sender: TObject);
var
   List : TList;
   i : Integer;
   S1, S2 : String;
   PReg : ^TReg;

begin

   List := TList.Create;

   for i := 0 to 3 do
   begin
      New(PReg);
      PReg^.Item := A1[i];
      PReg^.Objeto := A2[i];
      List.Add(PReg)
   end;

   for i := 0 to List.Count - 1 do
   begin
      S1 := TReg(List.Items[i]^).Item;
      S2 := TReg(List.Items[i]^).Objeto;
      ShowMessage( S1 + ',' + S2);
   end;

   for i := 0 to List.Count - 1 do
      Dispose(List.Items[i]);

   List.Free;

end;

// Gestión de Listas de Datos por medio de TQueue
procedure TForm1.Button3Click(Sender: TObject);
var
   Queue: TQueue;
   i : Integer;
   S1, S2 : String;
   PReg : ^TReg;

begin

   Queue:= TQueue.Create;

   for i := 0 to 3 do
   begin
      New(PReg);
      PReg^.Item := A1[i];
      PReg^.Objeto := A2[i];
      Queue.Push(PReg);
   end;

   for i := 0 to Queue.Count - 1 do
   begin
      PReg := Queue.Pop;
      S1 := PReg.Item;
      S2 := PReg.Objeto;
      ShowMessage( S1 + ',' + S2);
   end;

   Queue.Free;

end;

// Gestión de Listas de Datos por medio de TStack
procedure TForm1.Button4Click(Sender: TObject);
var
   Stack: TStack;
   i : Integer;
   S1, S2 : String;
   PReg : ^TReg;

begin

   Stack:= TStack.Create;

   for i := 0 to 3 do
   begin
      New(PReg);
      PReg^.Item := A1[i];
      PReg^.Objeto := A2[i];
      Stack.Push(PReg);
   end;

   for i := 0 to Stack.Count - 1 do
   begin
      PReg := Stack.Pop;
      S1 := PReg.Item;
      S2 := PReg.Objeto;
      ShowMessage( S1 + ',' + S2);
   end;

   Stack.Free;

end;

end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32, ejemplifica diferentes métodos para el manejo de listas de datos.

Nota: El ejemplo basado en el tipo TStack no se adapta a tu requerimiento por ser una pila (LIFO-Last In First Out), fue puesto solo como complemento del ejemplo con el tipo TQueue (FIFO-First In First Out), el cual se adapta a lo solicitado.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 18-07-2014 a las 07:35:28.
Responder Con Cita