zoukankan      html  css  js  c++  java
  • 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的对象引用,而不是简单的指针。

  • 相关阅读:
    2019.6.20刷题统计
    36 线程 队列 守护线程 互斥锁 死锁 可重入锁 信号量
    35 守护进程 互斥锁 IPC 共享内存 的方式 生产者消费者模型
    34 进程 pid ppid 并发与并行,阻塞与非阻塞 join函数 process对象 孤儿进程与僵尸进程
    33 udp 域名 进程
    32 粘包 文件传输
    31 socket客户端. 服务器 异常 语法
    30 网络编程
    29 元类 异常
    26 封装 反射 常用内置函数
  • 原文地址:https://www.cnblogs.com/xumenger/p/4687593.html
Copyright © 2011-2022 走看看