Escolar Documentos
Profissional Documentos
Cultura Documentos
Gustavo Bastos
Faculdade dos Guararapes
Aula 3 - 2006_2
Revisão
Introdução
Conceitos FIFO e LIFO
Estruturas de Dados
Conceitos e utilidades
Tipos de dados abstratos
Conceitos e utilidades
Características
Prato
Prato
retirado
retirado
Pop
Novo
Push
prato
Topo da
pilha
Pilha de pratos
Pilha de inteiros
empty()
Verifica se a pilha está vazia. True se
verdade.
top()
Examina o topo da pilha
push(x)
Coloca o elemento ‘x’ na pilha
pop()
Retira o elemento do topo da pilha
Pilha de inteiros estática
...
Não
Definido 1
topo
Push
Algoritmo pseudo-código pilha
para push Não
N
O topo é -1 e queremos Definido
inserir o número 13. O que
fazer? ...
nada push(int x) {
se (topo > N) então topo
Não
13
Definido
i+1
escreva(“Pilha cheia!”);
retorne; topo -1 i
topo topo + 1;
...
pilha[topo] x;
} 50 1
Top
pilha Não
Perguntar se a pilha está N
vazia para não gerar Definido
erro de acesso!
Algoritmo pseudo-código ...
para top
topo 13 i
-1
int top() {
pilha_vazia? ...
retorne
pilha[topo]; 50 1
}
Empty
pilha
Qual a resposta de empty? False Não
N
Definido
...
Algoritmo pseudo-código
para empty topo 13 i
-1
booleano empty() {
retorne topo < 1; ...
} 50 1
Pop
Perguntar se a pilha está pilha
vazia para não gerar Não
N
erro de acesso! Definido
Algoritmo pseudo-código
para pop
...
topo 13 i
nada pop() {
topo -1 i-1
pilha_vazia?
topo topo - 1; ...
} 1
50
Exercício de fixação
p = aloca(MAX); ...
Não
inicio Definido 1
p
Push dinâmico
Algoritmo pseudo-código pilha
para push fim Não
MAX
O topo é -1 e queremos Definido
inserir o número 13. O que
fazer? ...
nada push(int x) {
se (p > fim) então Não
p 13
escreva(“Pilha cheia!”); Definido
retorne; p -1
p p + 1;
*p x; ...
}
inicio 50 1
Top dinâmico
pilha Não
Perguntar se a pilha está MAX
fim Definido
vazia para não gerar
erro de acesso!
Algoritmo pseudo-código ...
para top
p 13
-1
int top() {
pilha_vazia? ...
retorne *p; 1
inicio 50
}
Empty dinâmico
pilha
Qual a resposta de empty? False Não
fim MAX
Definido
...
Algoritmo pseudo-código
para empty p 13
-1
booleano empty() {
retorne p < inicio; ...
} inicio 50 1
Pop dinâmico
Perguntar se a pilha está pilha
vazia para não gerar Não
fim MAX
erro de acesso! Definido
Algoritmo pseudo-código
para pop
...
p 13
nada pop() {
p -1
pilha_vazia?
p p - 1;
...
}
inicio 50 1
Exercício de fixação
Nível de arquitetura
Avaliação de expressões
Gerenciamento de memória
Problemas de busca
Segurança de dados
Nível de Arquitetura
((1 + 2) * 4) + 3
Pode ser escrito
12+4*3+
Usando uma pilha podemos resolver a
expressão
push quando for operando
pop dois operandos quando for um
operador
push o resultado
Gerenciamento de
memória
Muitas linguagens de programação
são orientadas a pilhas
Operações básicas recebem argumentos
a partir da pilha
Muitas máquinas virtuais usam pilha
Máquina virtual Java
Gerenciamento de
memória
Memória de tempo de execução usa
pilha
Manter informação de chamadas de
função
Fazer chamadas a funções recursivas
Problemas de Busca
Possíveis erros
Dados movidos erroneamente
Dados maiores do que o tamanho da pilha
Um possível ataque é passar dados muito
grandes
Pilha pode retornar para uma posição não
desejada
Variação de buffer overflow
Fonte de muitas brechas de segurança
Exercícios
Conceitos
LIFO e características
Aplicações
Hardware, software, linguagens
Implementação
Pilha estática
Pilha dinâmica
Bibliografia
Stack
http://en.wikipedia.org/wiki/Stack_
%28data_structure%29
Veloso, Paulo e outros. Estruturas de
Dados. 4ed. 1988.
Van Wyk, Christopher J. Data
structures and C programs. 1988.