Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Doppelt verkettete Liste als generischer Typ (https://www.delphipraxis.net/182085-doppelt-verkettete-liste-als-generischer-typ.html)

CarlAshnikov 29. Sep 2014 14:05

AW: Doppelt verkettete Liste als generischer Typ
 
Ich glaube du vermischst hier Daten und die Listen-Items. Falls ich dich richtig verstehe würde es meiner Meinung nach so aussehen:

Delphi-Quellcode:
type
  TChainList<T> = class(TPersistent)
  private
    FData:T;
    FDeleting: Boolean;
    FEol: Boolean;
    FPredecessor: TChainList;
    FSuccessor: TChainList;
    function GetEol: Boolean;
    procedure SetDeleting(const Value: Boolean);
    property Deleting: Boolean read FDeleting write SetDeleting;
  public
    destructor Destroy; override;
    procedure Add(Item: T);
    function Delete: TChainList;
    function Last: TChainList;
    function First: TChainList;
    function Next: TChainList;
    function Previous: TChainList;
    property Eol: Boolean read GetEol;
    property Data: T read FData write FData;
  end;

  TTestClass = class(TChainList<string>)

  end;

DeddyH 29. Sep 2014 14:05

AW: Doppelt verkettete Liste als generischer Typ
 
Was hältst Du von diesem Ansatz?
Delphi-Quellcode:
type
  TChainElement<T> = class
  private
    FData: T;
    FNext: TChainElement<T>;
    FPrior: TChainElement<T>;
  public
    property Data: T read FData write FData;
    property Next: TChainElement<T> read FNext write FNext;
    property Prior: TChainElement<T> read FPrior write FPrior;
  end;

  TChain<T> = class
  private
    FFirstElement: TChainElement<T>;
    FLastElement: TChainElement<T>;
    FCurrentElement: TChainElement<T>;
    function GetNext: TChainElement<T>;
    function GetPrior: TChainElement<T>;
    function GetBOF: Boolean;
    function GetEOF: Boolean;
    function GetFirst: TChainElement<T>;
    function GetLast: TChainElement<T>;
  public
    function Add: TChainElement<T>;
    procedure Delete(Item: TChainElement<T>);
    procedure Clear;
    property BOF: Boolean read GetBOF;
    property EOF: Boolean read GetEOF;
    property First: TChainElement<T> read GetFirst;
    property Last: TChainElement<T> read GetLast;
    property Next: TChainElement<T> read GetNext;
    property Prior: TChainElement<T> read GetPrior;
  end;
Und wenn Du unbedingt willst, kannst Du die Listenklasse weglassen und alles in der Element-Klasse implementieren.

[edit] Na toll, da tippe ich mir einen ab und andere sind wieder schneller. [/edit]

Schorschi5566 29. Sep 2014 14:34

AW: Doppelt verkettete Liste als generischer Typ
 
Zitat:

Zitat von mkinzler (Beitrag 1274216)

Vielen Dank. Das hilft mir weiter.


Grüße,
Uwe

Stevie 29. Sep 2014 19:22

AW: Doppelt verkettete Liste als generischer Typ
 
In Spring4D gibt's auch eine Implementierung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:08 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz