//链表节点
TSingleLinkedNode<T> = class
public
Value: T;
private
m_Next: TSingleLinkedNode<T>;
end;
TMYLinkedNode<T> = class
public
Value: T;
private
m_Prev, m_Next: TMYLinkedNode<T>;
end;
//链表池
TLinkedNodePool = class
protected
m_Nodes: TArray<TObject>;
m_Index: Integer;
m_Capacity: Integer;
m_Stoped: Boolean;
function NewNode: TObject; virtual; abstract;
procedure FreeNode(node: TObject); virtual; abstract;
function GetNode: TObject;
procedure RetNode(node: TObject);
procedure ReSize;
procedure Clear;
public
constructor Create(nCapacity: Integer = 128); virtual;
destructor Destroy; override;
end;
//单向链表
TSingleLinked<T> = class(TLinkedNodePool)
protected
m_Head: TSingleLinkedNode<T>;
m_CurrNode: TSingleLinkedNode<T>;
m_Count: Integer;
function NewNode: TObject; override;
procedure FreeNode(node: TObject); override;
class function Equal(value1, value2: T): Boolean; static;
public
destructor Destroy; override;
procedure Clear;
procedure Add(value: T);
function Delete(value: T; allItem: Boolean = False): TSingleLinkedNode<T>;
function First: TSingleLinkedNode<T>;
function Next: TSingleLinkedNode<T>;
property Count: Integer read m_Count;
end;
//双链表基类
TMYLinkedBase<T> = class(TLinkedNodePool)
protected
m_Head, m_Tail: TMYLinkedNode<T>;
m_CurrNode: TMYLinkedNode<T>;
m_Count: Integer;
function NewNode: TObject; override;
procedure FreeNode(node: TObject); override;
procedure AddT(value: T);
function DeleteT(value: T; allItem: Boolean = False): TMYLinkedNode<T>;
public
constructor Create(nCapacity: Integer = 128); override;
destructor Destroy; override;
procedure Clear;
function DelNode(node: TMYLinkedN
delphi 双向链表,单向链表,泛型版本
最新推荐文章于 2023-09-08 16:50:56 发布
本文详细介绍了如何在 Delphi 编程环境中使用泛型来实现双向链表和单向链表的数据结构。通过泛型的应用,实现了链表的高效、灵活和类型安全的操作,包括插入、删除、遍历等基本操作。对于理解和应用 Delphi 泛型以及数据结构的实践具有指导意义。

最低0.47元/天 解锁文章
805

被折叠的 条评论
为什么被折叠?



