直接可以继承或者使用TStack。
Pascal有指针,不过通常不使用。

解决方案 »

  1.   


    //-----------------------------------------------------------
    //
    //  本单元构建了一个指针链表堆栈的类
    //
    //
    //  功能用途:  可以当作理论上无长度限制的堆栈来使用,
    //              它包含,PUSH、POP、TOP、EMPTY基本等方法。
    //  构建方式:  使用的是单链表结构,建立链表堆栈。
    //
    //-----------------------------------------------------------unit Unit_PStack;interfacetype//记录结构声明>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  //指针堆栈的元素记录结构的指针
      TesStackRecordP=^TesStackRecord;
      //指针堆栈的元素记录结构
      TesStackRecord=record
        //记录的数据
        Data:char;
        //下一个记录的指针
        Next:TesStackRecordP;
      end;//类定义>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  //指针链表堆栈的类的声明
      TesPLinklistStack = class(TObject)
      private
        //堆栈链表的头节点
        FHead:TesStackRecord;
      protected
        //
      public
        //构造函数
        constructor Create;
        //入栈
        procedure PUSH(AData:char);
        //出栈
        procedure POP;
        //取栈顶值
        function TOP:char;
        //检查堆栈是否为空
        function IsEmpty:Boolean;
        //清空堆栈
        procedure EMPTY;
        //析构函数
        destructor Destroy;override;
      end;implementation//构造函数
    constructor TesPLinklistStack.Create;
    begin
      FHead.Next:=nil; 
    end;procedure TesPLinklistStack.PUSH(AData:char);
    var
      s:TesStackRecordP;
    begin
      New(s);
      s^.Data:=AData;
      s^.Next:=FHead.Next;
      FHead.Next:=s;
    end;//出栈
    procedure TesPLinklistStack.POP;
    var
      s:TesStackRecordP;
    begin
      if IsEmpty then Exit;
      s:=FHead.Next;
      FHead.Next:=s^.Next;
      Dispose(s);
    end;//取栈顶值
    function TesPLinklistStack.TOP:char;
    begin
      if IsEmpty then
      begin
        Result:=chr(0); Exit;
      end;  
      Result:=FHead.Next^.Data;
    end;//检查堆栈是否为空
    function TesPLinklistStack.IsEmpty:Boolean;
    begin
      Result:=(FHead.Next=nil);
    end;//清空堆栈
    procedure TesPLinklistStack.EMPTY;
    var
      p,s:TesStackRecordP;
    begin
      if IsEmpty then Exit;
      p:=FHead.Next;
      while p<>nil do
      begin
        s:=p;
        p:=p^.Next;
        Dispose(s);
      end;
      FHead.Next:=nil;
    end;//析构函数
    destructor TesPLinklistStack.Destroy;
    begin
      EMPTY;
    end;end.