Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #9  
Antiguo 30-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
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
  //Esta cadena sirve para cargar las letras
  ABC = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZ';

type
  // estructura de un nodo
  TNode = ^Node;
  Node = record
          Character: char;
          Sig: TNode;
         end;

  // Estructura de una clase que opera con una estructura LIFO (Cola)
  // para armar un abecedario
  // Debido a la simpleza de implementar una estructura LIFO
  // se optó por este método
  // Por tanto Z será el último elemento de la pila, y A el primero

  // De forma análoga se puede conseguir mediante FIFO o una lista genérica
  TABC = class
    private
      // Nuestro TOPE
      Ftop: TNode;

      // Inicilizar cola
      procedure Init;

      // Borrar o Limpiar cola
      procedure Clear;
    public
      constructor Create;
      destructor Destroy;

      // Push = Agregar
      procedure Push(Character: char);

      // Pop = Eliminar
      function Pop: char;

      // IsEmpty = EsVacia
      function IsEmpty: boolean;

      // DevolverCaracter (no lo elimina, solo consulta)
      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
            // No tenía nodo
            // NuevoNode es el primero
            Ftop.Sig := NewNode;
          end
     else begin
            // Hay más de un nodo
            // TOPE siempre apunta al último nodo
            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;

          // devolvemos el carater del elemento TOPE
          result := OldNode.Character;

          // Eliminamos el elemento tope y TOPE apunta al siguiente en la
          // cola
          FTop.Sig := OldNode.Sig;
          dispose(OldNode);
          end;
end;

constructor TABC.Create;
begin
  // reservamos el TOPE
  new(FTop);
  FTop.Sig := Nil;

  // Iniciamos la cola...
  Init;
end;

destructor TABC.Destroy;
begin
  // Borramos la cola
  Clear;

  dispose(FTop);
end;

procedure TABC.Init;
var Pos: integer;
begin
 // desde 1 hasta la longitud de la cadena ABC
 for Pos := 1 to Length(ABC) do
   // metemos en la pila el caracter Pos-ésimo de la cadena ABC
   Push(ABC[Pos]);
end;

procedure TABC.Clear;
var Node: TNode;
begin
  while NOT IsEmpty do
    Pop;
end;

function TABC.IsEmpty: boolean;
begin
  // TRUE si TOPE no apunta nada
  // FALSE en cualquier otro caso
  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.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
 



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
uso de punteros David OOP 19 14-12-2009 09:48:37
Punteros davitcito Varios 2 25-04-2005 22:46:24
Hay punteros en java? Trigger JAVA 2 05-10-2004 21:28:20
Punteros rafadrover OOP 8 18-09-2003 10:09:47


La franja horaria es GMT +2. Ahora son las 23:57:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi