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
public
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}
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;
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;
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;
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.