unit MyClasses; interface type PNode = ^Node; Node = record Info:Integer; Next:PNode; end; TStack = class private FNode:PNode; {указатель на вершину стека} public function Empty:Boolean; {True - стек пуст, False - иначе} procedure Push (Value:Integer); {добавление нового узла} procedure Pop (var Value:Integer); {удаление узла} constructor Create; {конструктор класса - инициализирует стек} destructor Destroy; override; {деструктор класса - очищает стек} end; implementation constructor TStack.Create; begin inherited; FNode:=nil; end; destructor TStack.Destroy; var Value:Integer; 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:Integer); var P:PNode; begin new(P); P.Next:=FNode; FNode:=P; P.Info:=Value; end; procedure TStack.Pop (var Value:Integer); var P:PNode; begin if not Empty then begin P:=FNode; FNode:=P.Next; Value:=P.Info; dispose(P); end; end; end.