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的對象引用,而不是簡單的指針。