Bueno. Lo prometido es deuda.
me tomé unos minutos y desarrollé un ejemplo implementando una estructura LIFO. Es decir una Cola. Lo que hice es implementar una classe TABC que viene con el código encapsulado para agregar, borrar, inicializar, etc..
¿Porqué una clase?
Pues a mi me da la impresión de que quieres intentar hacer una clase por lo de:
Código Delphi
[-]
function TClistletras.getletras: string;
Me he acostumbrado a codificar en Inglés o pseudoInglés... espero que no te moleste. Agregué los comentarios que me parecieron indicados exponer.
Bueno. La unidad es como sigue:
Código Delphi
[-]
unit UABC;
interface
uses
Classes;
CONST
ABC = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZ';
type
TNode = ^Node;
Node = record
Character: char;
Sig: TNode;
end;
TABC = class
private
Ftop: TNode;
procedure Init;
procedure Clear;
public
constructor Create;
destructor Destroy;
procedure Push(Character: char);
function Pop: char;
function IsEmpty: boolean;
function GetChar: char;
end;
implementation
procedure TABC.Push(Character: char);
var NewNode: TNode;
begin
new(NewNode);
NewNode.Character := Character;
NewNode.Sig := Nil;
if IsEmpty
then begin
Ftop.Sig := NewNode;
end
else begin
NewNode.Sig := FTop.Sig;
FTop.Sig := NewNode;
end;
end;
function TABC.Pop: char;
var OldNode: TNode;
begin
if NOT IsEmpty
then begin
OldNode := FTop.Sig;
result := OldNode.Character;
FTop.Sig := OldNode.Sig;
dispose(OldNode);
end;
end;
constructor TABC.Create;
begin
new(FTop);
FTop.Sig := Nil;
Init;
end;
destructor TABC.Destroy;
begin
Clear;
dispose(FTop);
end;
procedure TABC.Init;
var Pos: integer;
begin
for Pos := 1 to Length(ABC) do
Push(ABC[Pos]);
end;
procedure TABC.Clear;
var Node: TNode;
begin
while NOT IsEmpty do
Pop;
end;
function TABC.IsEmpty: boolean;
begin
result := FTop.Sig = Nil;
end;
function TABC.GetChar: char;
begin
if NOT IsEmpty
then result := FTop.Sig.Character;
end;
end.
Un ejemplo de uso, cargando un ListBox:
Código Delphi
[-]procedure TForm1.Button1Click(Sender: TObject);
var ABCobj: TABC;
i: integer;
begin
ABCobj := TABC.Create;
for i := 1 to 27 do
ListBox1.Items.insert(0,ABCobj.pop);
Application.ProcessMessages;
ABCobj.Destroy;
end;
Creería que con eso puedes darte una idea de como implementarlo con otras estructuras, por ejemplo FIFO.
Si tienes dudas, avisa.
Saludos,
PD: Si algún moderador pasa por aquí, que mueva a este hilo a la sección adecuada ya que el tema no correspondería al subforo Internet.