pilha Com Alocação Dinamica
Toda área alocada dinamicamente, é necessário que tenha um referenciador, pois a alocação é feita em tempo de execução e a mesma não tem rótulo e temos que utilizar o endereço para poder manipular os dados.
Como criar variáveis do tipo ponteiro (ou apontador). var : ^ ; var p : ^integer;
Como alocar variáveis dinamicamente New (); Ex: new(p);
Como manipular áreas (variáveis) alocadas dinamicamente
^
p^ := 10;
Como liberar áreas (variáveis) alocadas dinamicamente := nil;
Ex: p : nil;
Código feito em PASCAL de uma pilha alocada dinamicamente.
program PilhaDin; uses Crt;
const NULO = char(000);
type Tdados = char; type ptr = ^nodo; nodo = record dados : Tdados; prox : ptr; end;
Function IntToStr(I : Longint) : String;
Var S : String; begin Str (I,S); IntToStr:=S; end; procedure CreateP(var P : ptr); begin P := Nil; end; function isEmptyP(P : ptr):boolean; begin isEmptyP := (P = Nil); end; procedure DestroyP(var P : ptr); var aux : ptr; begin if NOT isEmptyP(P) Then begin while NOT isEmptyP(P) do begin aux := P; P := P^.prox; dispose(aux); end; writeln('Destruida'); end else writeln('Destruida'); end; procedure PushP(var P : ptr; elem : Tdados); var aux : ptr; begin new(aux); if NOT isEmptyP(aux) Then begin aux^.dados := elem; aux^.prox := P; P := aux; end else Write('problema na alocação de memoria'); end; function PopP(var P : ptr):Tdados; var aux : ptr; blc : Tdados; begin if NOT isEmptyP(P) Then begin blc := P^.dados; aux := P; P := P^.prox; dispose(aux); PopP := blc; end else begin Write('Underflow!'); readln; PopP := NULO;//halt; end; end; function TopP(P :ptr):Tdados; begin if NOT isEmptyP(P) Then TopP := P^.dados else TopP := NULO; end; procedure ShowP(P : ptr); begin if isEmptyP(p) Then writeln('Pilha vazia') else while not isEmptyP(p)