program pilas_mediante_lista_enlazada;

Type
    tpila = ^Rec;
    Rec = Record
        clave : Integer;
        sig : tpila;
    End;

Procedure crear(Var pila : tpila);
begin
  new(pila);
  pila^.sig := NIL
end;

Function vacia(pila : tpila) : boolean;
begin
  vacia := pila^.sig = NIL
end;

Procedure apilar(pila : tpila; elem : Integer);
Var
  nuevo : tpila;
Begin
  New(nuevo);
  nuevo^.clave := elem;
  nuevo^.sig := pila^.sig;
  pila^.sig := nuevo
End;

Procedure desapilar(pila : tpila; Var elem : Integer);
Var
  aux : tpila;
Begin
  aux := pila^.sig;
  elem := aux^.clave;
  pila^.sig := aux^.sig;
  dispose(aux)
End;


Var
  pila : tpila;
  elem : Integer;
Begin
  crear(pila);
  if (vacia(pila)) then writeln('Pila vacia!');
  apilar(pila, 1);
  desapilar(pila, elem)
end.