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