Escolar Documentos
Profissional Documentos
Cultura Documentos
Estrutura de Dados que corresponde a uma lista sequencial com a propriedade seguinte: LIFO O primeiro elemento a entrar o ltimo a sair (Last in First Out) Operaes bsicas: criar uma pilha vazia; sobreposio de um novo elemento; retirar o elemento do topo da pilha vericar qual o elemento no topo da pilha vericar se a pilha est vazia Representao dinmica: type TipoValor = . . . ; Pilha = Elemento; Elemento = record valor : TipoValor; ant : Pilha; end;
MP II, 2006/2007 p.16/??
Pilha;
function vazia(P:Pilha) : boolean; devolve verdade sse a pilha P estiver vazia procedure sobrepor(var P : Pilha; x : TipoValor) coloca um novo elemento com x no topo da pilha P procedure remover(var P : Pilha) remove o elemento da cabea da pilha P; d erro se vazia function topo(P:Pilha) : TipoValor; Se a pilha P no estiver vazia, devolve o valor no elemento do topo de P ; d erro se vazia
Fila;
function vazia(F:Fila) : boolean; devolve verdade sse a la F estiver vazia procedure por(var F : Fila; x : TipoValor) coloca um novo elemento com x no m da la F procedure remover(var F : Fila) remove o elemento da cabea da la F; d erro se vazia function frente(P:Pilha) : TipoValor; Se a la F tiver elementos, devolve o valor no elemento da cabea de F; d erro se vazia
Uma Pilha deve ser implementada como Lista Ligada Simples Uma Fila deve ser implementada como Lista Ligada com Elemento Base
{* devolve TRUE sse pilha vazia *} function vaziaP(P : Pilha): boolean; begin if P == nil then vaziaP := true else vaziaP := false end;
MP II, 2006/2007 p.21/??
{* cria novo elemento Elemento, inicializa e devolve apontador *} function cria_elem(val : TipoValor) : Lista; var aux : Lista; begin new(aux); with aux do begin valor := val; prox := nil; end; cria_elem := aux; end; {* cria e coloca novo elemento no topo de p = INSERE NA CABECA *} . . .
{* remove elemento do topo de P = REMOVE A CABECA *} Procedure remover(var P : Pilha) var aux : Pilha; begin if not vaziaP(P) then begin aux := P; P := P.prox ; dispose(aux); end else writeln(**** ERRO: Tentativa de remover de pilha vazia); end;
Continuao da continuao
{* devolve o valor do elemento no topo de p *} procedure topo(P Pilha; var val : TipoValor); begin if not vaziaP(P) then val := p.valor; else begin writeln(**** ERRO: Tentativa de consultar pilha vazia) val := valor_vazio; end end;
{* devolve TRUE sse fila vazia *} function vaziaP(F : Fila): boolean; begin if F.inicio == nil then vaziaF := true else vaziaF := false end; {* INSERE NO FIM COM PONTEIRO AUXILIAR *} Procedure por(val : TipoValor; var F : Fila) var novo : Lista; begin novo := cria_elem(val); if vaziaF(F) then F.inicio := novo; else F.fim.prox := novo; F.fim := novo; end;
{* remove elemento da frente de F = REMOVE A CABECA *} Procedure remover(var F : Fila) var aux : Lista; begin if not vaziaF(F) then begin aux := F.inicio; F := aux.prox; dispose(aux); if vaziaF(F) then F.fim := nil; { se este era o ultimo elemento } end else writeln(**** ERRO: Tentativa de remover de fila vazia); end;
Continuao da continuao
{* devolve o valor do elemento no topo de p *} procedure topo(F : Fila; var val : TipoValor); begin if not vaziaF(F) then val := F.inicio.valor; else begin writeln(**** ERRO: Tentativa de consultar Fila vazia); val := valor_vazio; end end;