unit MyClasses; interface type T = Char; PNode = ^Node; Node = record Info:Char; Next:PNode; end; TStack = class private FNode:PNode; public function Empty:Boolean; procedure Push(Value:T); procedure Pop(var Value: T); constructor Create; destructor Destroy; override; end; implementation constructor TStack.Create; begin inherited; FNode:=nil; end; destructor TStack.Destroy; var Value: T; begin while (not Empty) do Pop (Value); inherited; end; function TStack.Empty:Boolean; begin if FNode=nil then Result:=true else Result:=false; end; procedure TStack.Push(Value: T); var P:PNode; begin new(P); P.Next:=FNode; FNode:=P; P.Info:=Value; end; procedure TStack.Pop (var Value: T); var P:PNode; begin if not Empty then begin P:=FNode; FNode:=P.Next; Value:=P.Info; dispose(P); end; end; end.