{*************************************************************************** Programa sobre Pilhas Adriano Marto Reis 08/12/1999 ***************************************************************************} uses Dos, Crt, Memory; type Boolean = (False, True); TNoPtr = ^TNo; TNo = record Dado: integer; Proximo: TNoPtr; end; TPilha = record Topo: TNoPtr; end; {***************************************************************************} function Pop (var Pilha: TPilha; var Dado: integer): Boolean; { retira um dado da pilha e guarda va vari vel Dado } var No: TNoPtr; begin if Pilha.Topo <> nil then begin No := Pilha.Topo; Dado := No^.Dado; Pilha.Topo := No^.Proximo; FreeMem (No, SizeOf (TNo)); Pop := True; end else Pop := False; end; {***************************************************************************} function Push (var Pilha: TPilha; const Dado: integer): TNoPtr; { guarda o conte£do de Dado em Pilha } var No: TNoPtr; begin No := MemAlloc (SizeOf (TNo)); if No <> nil then begin No^.Dado := Dado; No^.Proximo := Pilha.Topo; Pilha.Topo := No; end; Push := No; end; {***************************************************************************} var Dado: integer; Pilha: TPilha; begin ClrScr; Pilha.Topo := nil; { entrada de dados... } Write ('Digite um dado (inteiro) ou -1 para terminar: '); ReadLn (Dado); while Dado <> -1 do begin Push (Pilha, Dado); Write ('Digite um dado (inteiro) ou -1 para terminar: '); ReadLn (Dado); end; { saĦda de dados... } WriteLn ('Descarregando a pilha:'); while Pop (Pilha, Dado) = True do WriteLn (Dado); end.