PROGRAM p;
TYPE
TElemento = char;
TPila = ^TNodo;
TNodo = RECORD
e: TElemento;
sig: TPila;
END;
 
TFICHERO = FILE OF TPila;
 
VAR
 pil:TPila;
 ele:TElemento;
 
 PROCEDURE CargarDatos(VAR baraja:TPila);
      VAR
         ficher:TFICHERO;
      BEGIN
               Assign(ficher,'C:pila.dat');
               RESET(ficher);
                 read(ficher,baraja);
               CLOSE(ficher);
      END;
 
   {Esto lo que hace es guardar una partida en ficheros binario, lo hace guardando los 10 registros que contienen datos de la partida}
 
   PROCEDURE GuardarDatos(VAR baraja:TPila);
      VAR
         ficher:TFICHERO;
      BEGIN
 
         Assign(ficher,'C:pila.dat');
          REWRITE(ficher);
           write(ficher,baraja);
         CLOSE(ficher);
 
      END;
 
 
PROCEDURE CrearPilaVacia(VAR pila: TPila);
BEGIN
        pila := NIL;
END;
FUNCTION EsPilaVacia(pila: TPila): boolean;
BEGIN
EsPilaVacia := (pila = NIL);
END;
PROCEDURE Apilar(VAR pila: TPila; e: TElemento);
VAR
aux: TPila;
BEGIN
new(aux);
aux^.e:=e;
aux^.sig:= pila;
pila:=aux;
END;
PROCEDURE Desapilar(VAR pila: TPila);
VAR
aux: TPila;
BEGIN
IF NOT EsPilaVacia(pila) THEN
BEGIN
aux := pila;
pila := pila^.sig;
dispose(aux);
END;
END;
PROCEDURE Cima(pila: TPila; VAR e: TElemento);
{Implementado como procedimiento por generalidad. Una función
podría no ser capaz de devolver TElemento.
Se devuelve la cima sin eliminar el elemento de la pila.}
BEGIN
{Para un tipo simple la asignación simple es válida}
e := pila^.e;
writeln(e);
END;
 
 
BEGIN
CrearPilaVacia(pil);
CargarDatos(pil);
cima(pil,ele);
readln;
END.