Pilha Encadeada

Joao Paulo Schwarz Schuler
{ Turbo Pascal and Virtual Pascal source }
                 Program Meu_Nome_na_Pilha;

uses crt;

const MEU_NOME : packed string[80] = ('Joao Paulo Schwarz Schuler');

type   TNODO = record
                 DADO:char;
                 PROX:pointer;
               end;

     OPILHA = object                        { Objeto de pilha          }
                TAM:word;                   { TAM : tamanho da pilha   }
                NO,PRIM:^TNODO;             { PRIM: aponta para    o   }
                                            {       primeiro nodo da   }
                                            {       pilha.             }
                                            { NO  : aponta   para  o   }
                                            {       nodo de trabalho   }
                                            {       quase sempre com   }
                                            {       mesmo  valor  de   }
                                            {       PRIM.              }
                constructor INIT;           { inicia a pilha           }
                procedure PUSH(DADO:char);  { insere dado na pilha     }
                function POP:char;          { retira dado da pilha     }
                function TAMANHO:word;      { devolve tamanho da pilha }
                destructor DONE;            { desaloca pilha           }
              end;

     POINTER_OPILHA = ^OPILHA;



constructor OPILHA.INIT;
begin
PRIM:=nil;
TAM:=0;
end;

procedure OPILHA.PUSH(DADO:char);
begin
new(NO);
NO^.DADO:=DADO;
NO^.PROX:=PRIM;
PRIM:=NO;
inc(TAM);
end;

function OPILHA.POP:char;
begin
POP:=NO^.DADO;
PRIM:=NO^.PROX;
dispose(NO);
NO:=PRIM;
dec(TAM);
end;

function OPILHA.TAMANHO:word;
begin
TAMANHO:=tam;
end;

destructor OPILHA.DONE;
var DADO:char;
begin
while TAM>0 do DADO:=POP;
end;


var P:POINTER_OPILHA;    { P:apontador de objeto dinamico do tipo OPILHA }
    LOOP:word;
    L:word;              { recebe tamanho do MEU_NOME }

begin { of program }
new(P,INIT);             { aloca e inicia objeto dinamico }
L:=length(MEU_NOME);
for LOOP:=1 to L do P^.PUSH(MEU_NOME[LOOP]);
while P^.TAMANHO>0 do
  begin
  write(P^.POP);
  end;
writeln;
dispose(P,DONE);         { desaloca e termina objeto dinamico }
end.  { of program }


Return to the Home Page

Return to the Fontes em Pascal Page

I want to read your E-Mail