Algoritmos e Estruturas de Dados

Propaganda
Pilhas
new:
free:
top:
push:
pop:
15-04-2005
Stack(INFO)
Stack(INFO)
INOUT: Stack(INFO) x INFO
INOUT: Stack(INFO) x OUT: INFO
->
->
->
->
->
Stack(INFO)
Ø
INFO
STATUS
STATUS
Algoritmos e Estruturas de Dados
45
Pilhas Estáticas
STACKE = Base x Stop x tmax
Base : Seq(INFO)
Stop : ÍNDICE
tmax : INTEIRO
15-04-2005
Algoritmos e Estruturas de Dados
46
Inicialização de Pilha Estática
PROC new(tam:INTEIRO):STACKE(INFO)
VAR base: Seq(INFO)
VAR Stop: ÍNDICE
VAR tmax: INTEIRO
INÍCIO
base.new()
Stop <- -1
tmax <- tam
RET (base, Stop, tmax)
FIM
15-04-2005
Algoritmos e Estruturas de Dados
47
Inserção numa Pilha Estática
PROC Push(INOUT: s:STACKE(INFO), val:INFO) : STATUS
INÍCIO
SE s.getPTop() = s.getTMax() - 1 ENTÃO
RET INSUCESSO [“Stack Cheia”]
SENÃO
s.setPTop(s.getPTop() + 1)
(s.getBase()).set(val, s.getPTop())
RET SUCESSO
FSE
FIM
15-04-2005
Algoritmos e Estruturas de Dados
48
Remoção numa Pilha Estática
PROC Pop(INOUT: s:STACKE(INFO), OUT: val:INFO) : STATUS
INÍCIO
SE s.getPTop() = -1 ENTÃO
val <- NULO
RET INSUCESSO [“Stack Vazia”]
SENÃO
val <- (s.getBase()).get(s.getPTop())
s.setPTop(s.getPTop() - 1)
RET SUCESSO
FSE
FIM
15-04-2005
Algoritmos e Estruturas de Dados
49
Pilhas Dinâmicas
STACKD = info x next
info : INFO
next : STACKD
15-04-2005
Algoritmos e Estruturas de Dados
50
Inserção numa Pilha Dinâmica
15-04-2005
Algoritmos e Estruturas de Dados
51
Algoritmo de Inserção
PROC Push(INOUT: lstack:STACKD(INFO),
val:INFO) : STATUS
VAR novo : STACKD(INFO)
INÍCIO
novo.new()
novo.setInfo(val)
novo.setNext(lstack)
lstack <- novo
FIM
15-04-2005
Algoritmos e Estruturas de Dados
52
Remoção numa Pilha Dinâmica
15-04-2005
Algoritmos e Estruturas de Dados
53
Algoritmo de Remoção
PROC Pop(INOUT: lstack:STACKD(INFO),
OUT: val:INFO) : STATUS
VAR qaux : STACKD(INFO)
INÍCIO
SE lstack ≠ NULO ENTÃO
val <- lstack.getInfo()
qaux <- lstack
lstack <- lstack.getNext()
qaux.free()
RET SUCESSO
SENÃO
val <- Ø
RET INSUCESSO [“Pilha vazia”]
FSE
FIM
15-04-2005
Algoritmos e Estruturas de Dados
54
Download