Unit STACK; INTERFACE Type TElem = char; {тип элемепнтов списка} TStack = ^TElement; {представление списка} TElement = record info:TElem; Next:TStack end; {инициализация стека} Procedure StackInit(var s:TStack); {проверка на пустоту списка} Function StackEmpty(S:TStack):Boolean; {поместить эле-т в стек} Procedure StackPush(var S:TStack; E:TElem); {извлечь эл-т из списка} Function StackPop(var S:TStack):TElem; {--------------------------------------} IMPLEMENTATION Procedure StackInit(var s:TStack); begin s:=nil end; Function StackEmpty(S:TStack):Boolean; begin StackEmpty:=(S=NIL); end; Procedure StackPush(var S:TStack; E:TElem); var z:TStack; begin new(z); z^.next:=s; Z^.INFO:=E; s:=z; end; Function StackPop(var S:TStack):TElem; const errorcode=255; var z:TStack; begin If StackEmpty(S) then begin writeln('Список пуст'); Halt(errorcode); end else begin z:=s; s:=s^.next; stackPop:=z^.info; dispose(z) end end; end.