prof ulisses vasconcelos estrutura de dados aula 02 - pilha conceito inserção remoção

23
Prof Ulisses Vasconcelo s ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Upload: barbara-mario

Post on 07-Apr-2016

222 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

ESTRUTURA DE DADOSAULA 02 - PILHA

ConceitoInserçãoRemoção

Page 2: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

AULA 02 - PILHA Conceito Inserção Remoção

Page 3: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

CONCEITO Pilhas: São estruturas de dados dinâmicas

que possui duas regiões conhecidas como topo e base (ou fundo).

Inserção (LIFO): Os itens sempre são inseridos no topo da pilha

Remoção(LIFO): Os itens sempre são retirados do topo da pilha

Estrutura dinâmica: Comprimento variável O único elemento que se tem acesso é o

elemento que está no topo A base é o primeiro elemento que foi

inserido na pilha O topo é o ultimo elemento que foi inserido

na pilha

Page 4: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

CONCEITO Funcionamento de pilha

utilizando vetores:

-120554

1289

01234

24

5

Pilhacheia

Pilhavazia

• Vetores possuem um espaço

limitado para armazenamento de dados.

• Necessitamos definir um espaço grande o suficiente para a nossa pilha.

• Necessitamos de um indicador (sentinela) de qual elemento do vetor é o atual topo da pilha.

Page 5: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

CONCEITO Funcionamento de pilha

utilizando vetores:Declaração da pilhaconst max = 50; var

pilha : recordtopo : Byte;dados = ARRAY [1..max] OF

Integer end;

Page 6: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

CONCEITO Operações

Colocar (PUSH) itens na pilha Retirar (POP) itens da pilha Obtêm o elemento do topo (TOP) da pilha Verificar se a pilha está cheia Verificar se a pilha está vazia Iniciar ou limpar a pilha

Erros possíveis Estouro de pilha (overflow): Tentar inserir

em pilha cheia Underflow tentar acessar/excluir um item

de uma pilha vazia

Page 7: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

CONCEITO Implementação de

funcionalidades de uma pilha: IniciaçãoProcedure Init(var P:pilha);Begin

P.topo:=-1;End;

Page 8: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

CONCEITOS Verifica se a pilha é vaziaFunction IsEmpty(var

P:pilha):boolean;Begin

if P.topo = -1then IsEmpty:=trueelse IsEmpty:=false

End;

Page 9: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

CONCEITOS Verifica se a pilha está cheiaFunction IsFull(var

P:pilha):boolean;Begin

if P.topo=max then IsFull:=true

else IsFull:=false

End;

Page 10: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

Inserção Inserção em pilha de arrayProcedure Push(var P:pilha; x:char);Begin

if not IsFull(P) then begin

P.topo:=P.topo + 1; P.dados[P.topo]:= x

end else writeln(´Pilha Cheia!´)End;

Verificação para evitar overflow

Page 11: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

Exclusão Exclusão em pilha de arrayFunction Pop(var P:pilha):char;Begin

if not IsEmpty(P) then begin

Pop:=P.dados[P.topo]; P.topo:=P.topo - 1;

endelse

writeln(´Pilha Vazia!´)End;

Verificação para evitar underflow

Page 12: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

Pilhas de Ponteiros Criação da pilha usando

ponteirostype

apontador = ^celula;celula = record item:integer; prox:apontador; end;tipopilha=record fundo:apontador; topo:apontador; end;

Page 13: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

Célulacelula = record

item:integer; prox:apontador; end;

Prox

Item

item: Variável que recebe valores inteirosprox: Apontador que aponta para um registro do tipo célulaDeclaração: Var c1 : celula;

Utilizaçãoc1.item := 3;c1.prox :=

Page 14: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

Pilhatipopilha=record

fundo:apontador; topo:apontador; end;

Topo

Fundo

Célula Célula

fundo: Apontador que aponta para um registro do tipo célulatopo: Apontador que aponta para um registro do tipo célula

Ref. 0 Ref. 1

Ref. 0 Ref. 1

Page 15: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

Pilhas de ponteiros Inicia pilhaprocedure iniciapilha(var

pilha:tipopilha);var   aux:apontador;begin   new (aux);   pilha.fundo:=aux;   pilha.topo:=pilha.fundo;   pilha.topo^.prox :=nil;end;

Page 16: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

procedure iniciapilha(var pilha:tipopilha);var   aux:apontador;begin   new (aux);   pilha.fundo:=aux;   pilha.topo:=pilha.fundo;   pilha.topo^.prox :=nil;end;

Prox

Item

aux

Topo

Fundo

Ref. 0Ref. 0

Ref. 0 Ref. 0

{Ref. 0

NIL

NIL

Page 17: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

Pilhas de ponteiros Verifica se está vaziafunction

vazia(pilha:tipopilha):boolean;begin   vazia:=pilha.fundo = pilha.topo;end;

Page 18: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

Pilhas de ponteiros Inserçãoprocedure inserir(x:integer;var

pilha:tipopilha);var aux:apontador;begin   new (aux);   pilha.topo^.prox:=aux;   aux^.prox := nil;   aux^.item :=x;   pilha.topo := aux;end;

Page 19: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

procedure inserir(x:integer;var pilha:tipopilha);var aux:apontador;

begin

   new (aux);   pilha.topo^.prox:=aux;   aux^.prox := nil;   aux^.item :=x;   pilha.topo := aux;end;

Prox

Item

auxRef. 1

Ref. 1

Prox

Item

Topo

Fundo

Ref. 0

Ref. 0 Ref. 0

NILRef. 1

NIL

3

3

3

Ref. 1

Page 20: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

Pilhas de ponteiros Exclusãoprocedure retirai(var x:integer; var pilha:tipopilha);

varaux:apontador;beginaux:= pilha.fundo^.prox;x:=aux^.item;pilha.fundo^.prox := aux^.prox;if(pilha.fundo^.prox = nil ) then

pilha.topo := pilha.fundo;dispose(aux);end;

Page 21: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

procedure retirai(var pilha:tipopilha);

varaux:apontador;beginaux:= pilha.fundo^.prox;pilha.fundo^.prox := aux^.prox;if(pilha.fundo^.prox = nil ) then

pilha.topo := pilha.fundo;dispose(aux);

end;

Prox

Item

Ref. 1

Prox

Item

Topo

Fundo

Ref. 0

Ref. 0

Ref. 1

NIL3

Ref. 1

Valor de aux: Ref. 1

NIL

Ref. 0

Page 22: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

Pilhas de ponteiros Exclusãoprocedure retirar(var x:integer; var pilha:tipopilha);

varaux:apontador;beginif ( pilha.fundo^.prox^.prox = nil ) then retirai(x,pilha)else

begin aux:=pilha.fundo^.prox; while (aux^.prox <>pilha.topo) do aux :=aux^.prox; pilha.topo :=aux; aux:=aux^.prox; x:=aux^.item; pilha.topo^.prox:=nil; dispose(aux); end;

end;

Page 23: Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção

Prof Ulisses Vasconcelos

procedure retirar(var pilha:tipopilha);var aux:apontador; begin if ( pilha.fundo^.prox^.prox = nil ) then

retirai(pilha)else

begin aux:=pilha.fundo^.prox; while (aux^.prox <>pilha.topo) do aux :=aux^.prox; pilha.topo :=aux; aux:=aux^.prox; pilha.topo^.prox:=nil; dispose(aux); end;

end; Ref. 1

Prox

Item

Topo

Fundo

Ref. 0

Ref. 0

Ref. 1

Ref. 23

Ref. 2

Ref. 2

NIL5Valro de aux:Ref. 1

Ref. 1

Valro de aux:Ref. 2

NIL