Delphi容器類之---TOrderedList、TStack、TQueue、TObjectStack、TObjectQueue


TOrderedList、TStack、TQueue        

  Contnrs單元還定義了其他三個類:TOrderedList、TStack、TQueue

TOrderedList

TOrderedList = class(TObject)
private
    FList: TList;
protected
    procedure PushItem(AItem: Pointer); virtual; abstract;
    ...
public
    function Count: Integer;
    function AtLeast(ACount: Integer): Boolean;
    procedure Push(AItem: Pointer);
    function Pop: Pointer;
    function Peek: Pointer;
end;

TStack

TStack = class(TOrderedList)
protected
    procedure PushItem(AItem: Pointer); override;
end;

TQueue

TQueue = class(TOrderedList)
protected
    procedure PushItem(AItem: Pointer); override;
end;

  

  要注意,雖然TOrderedList並不是從TList繼承的,但是它在內部的實現時,使用了TList來存儲指針。另外注意TOrderedList類的 PushItem過程是一個抽象過程,所以我們無法實例化TOrderList 類,而應該從TOrderList繼承新的類,並實現抽象的PushItem 方法。

  因此TStack、TQueue繼承自TOrderedList,所以TStack、TQueue的指針也是存在其內部的TList中的。

  TStack和TQueue正是實現了PushItem 抽象方法的類,我們可以實例化TStack和TQueue類作為后進先出的堆棧(LIFO)和先進先出的隊列(FIFO)。下面是這兩個類的方法的使用說明:

  • Count  返回列表中的項目數。
  • AtLeast  可以用來檢檢查鏈表的大小,判斷當前列表中的指針數目是否大於傳遞的參數值,如果為True便是列表中的項目數大於傳來的參數。
  • Push  對於TStack類,Push方法將指針添加到鏈表的最后,對於TQueue類,Push方法則將指針插入到鏈表的開始。
  • Pop  返回鏈表的末端指針,並將其從鏈表中刪除。
  • Peek  返回鏈表的末端指針,但是不將其從鏈表中刪除。

 

TObjectStack、TObjectQueue         

  Contnrs單元中最后兩個類是TObjectStack和TObjectQueue類,類的定義如下

TObjectStack

TObjectStack = class(TStack)
public
    procedure Push(AObject: TObject);
    function Pop: TObject;
    function Peek: TObject;
end;

TObjectQueue

TObjectQueue = class(TQueue)
public
    procedure Push(AObject: TObject);
    function Pop: TObject;
    function Peek: TObject;
end;

  這兩個類只是TStack和TQueue 類的簡單擴展,在鏈表中保存的是TObject的對象引用,而不是簡單的指針。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM