Você está na página 1de 13

Estrutura de Dados Pilha (Stack)

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/??

Operadores sobre Pilha

function criar : cria uma pilha vazia

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

MP II, 2006/2007 p.17/??

Estrutura de Dados Fila (Queue)


Estrutura de Dados que corresponde a uma lista sequencial com a propriedade seguinte: FIFO O primeiro elemento a entrar o primeiro a sair (First in First Out) Operaes bsicas: criar uma la vazia; insero de um novo elemento no m; retirar o elemento da frente da la vericar qual o elemento na frente da pilha vericar se a la est vazia Representao dinmica: type TipoValor = . . . ; Fila = Elemento; Elemento = record valor : TipoValor; ant : Fila; end;
MP II, 2006/2007 p.18/??

Operadores sobre Fila

function criar : cria uma la 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

MP II, 2006/2007 p.19/??

Filas e Pilhas como Estruturas Dinmicas

Uma Pilha deve ser implementada como Lista Ligada Simples Uma Fila deve ser implementada como Lista Ligada com Elemento Base

MP II, 2006/2007 p.20/??

Pilha (Stack) Estrutura LIFO


type TipoValor = . . . ; Lista = Elemento; Elemento = record valor : TipoValor; ant : Lista; end; Pilha = Lista; {* Cria uma pilha vazia *} function criarP : Pilha; begin criarP := nil end;

{* 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/??

Implementao da operaes para Pilha

{* 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 *} . . .

MP II, 2006/2007 p.22/??

Implementao da operaes para Pilha continuao

{* 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;

MP II, 2006/2007 p.23/??

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;

MP II, 2006/2007 p.24/??

FILA (Queue) Estrutura FIFO


TipoValor = . . . ; Lista = Elemento; Elemento = record valor : TipoValor; ant : Lista; end; Fila = record inicio : Lista; fim : Lista; end; {* Cria uma fila vazia *} function criarF : Fila; var aux : Fila; begin new(aux); with aux do begin inicio := nil; fim := nil; end; criarF := aux; end;
MP II, 2006/2007 p.25/??

Implementao da operaes para FILA

{* 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;

MP II, 2006/2007 p.26/??

Implementao da operaes para FILA continuao

{* 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;

MP II, 2006/2007 p.27/??

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;

MP II, 2006/2007 p.28/??

Você também pode gostar