SlideShare une entreprise Scribd logo
1  sur  51
Télécharger pour lire hors ligne
Estruturas de Dados em Java
Pilha e Fila
Crédito: Prof. Gilbert Azevedo
Adaptações: Prof. Jailton Carlos
Jailton.paiva@ifrn.edu.br
19/10/2010 1
OBJETIVO DA AULA DE HOJE
19/10/2010 2
Compreender e aplicar os conceitos de
Pilha e Fila em Java
Boxing e Unboxing
• Ao inserir um inteiro num ArrayList, é executado um
boxing
• Da mesma forma, quando este valor é lido, um
unboxing é necessário.
3
ArrayList Lista = new ArrayList();
int i = 1;
Lista.Add(i);
int j = (int)Lista[0];
Todo esse procedimento gera um overhead, que degrada a performance
dos aplicativos
19/10/2010 4
Pilha
19/10/2010 5
• Contêiner onde objetos são inseridos e
retirados de acordo com o princípio:
– “o último que entra é o primeiro que sai”
– LIFO – Last In, First Out
Pilhas e Filas 6
Aplicações de Pilha
• Aplicações diretas
– Histórico de páginas visitadas em um navegador
– Seqüência de desfazer em um editor de textos
– Cadeia de chamada de métodos em um programa
• Aplicações indiretas
– Estrutura de dados auxiliares para algoritmos
Pilhas e Filas 7
Tipo Abstrato de Dados (TAD)
• Um TAD é uma abstração de uma estrutura de
dados
• Um TAD especifica:
– Dados armazenados
– Operações realizadas sobre os dados
– Condições de erros associadas às operações
• O TAD Pilha armazena objetos genéricos
Pilhas e Filas 8
Pilha - Operações
• Principais
– push(object): insere um elemento na pilha
– object pop(): remove e retorna o último elemento inserido
• Auxiliares
– object top(): retorna o último elemento inserido sem
removê-lo
– integer size(): retorna o número de elementos
armazenados
– boolean isEmpty(): indica se há ou não elementos na pilha
Pilhas e Filas 9
Pilha de Inteiros
Operação Saída Início – Pilha – Fim
push(5) 5
push(3) 5, 3
pop() 3 5
push(7) 5, 7
size() 2 5, 7
pop() 7 5
top() 5 5
pop() 5 -
pop() Erro -
isEmpty() True -
Pilhas e Filas 10
Pilha - Exceções
• Ao executar uma operação em um TAD, podemos
causar uma condição de erro, que chamamos
exceção
• Exceções podem ser levantadas (thrown) por uma
operação que não pode ser executada
• No TAD Pilha, as operações pop e top não podem
ser realizadas se a pilha estiver vazia
• Executar pop ou top em uma pilha vazia causa a
exceção StackEmptyException
Pilhas e Filas 11
Pilha em Java
• Por sua importância, a estrutura de dados Pilha é
uma classe “embutida” no pacote java.util
• A classe java.util.Stack é uma estrutura de dados que
armazena objetos Java genéricos e inclui, entre
outros, os métodos:
– push(obj), pop(), peek(), size() e empty()
• Contudo, é importante, aprender como implementar
uma pilha desde o início
Pilhas e Filas 12
Interface Pilha em Java
public interface Stack {
public int size();
public boolean isEmpty();
public Object top() throws StackEmptyException;
public void push(Object o);
public Object pop() throws StackEmptyException;
}
Classe Stack
o Declarando
• Stack pilha = new Stack();
o Inserindo elementos
• pilha.push(1);
19/10/201013
1
Inserção ocorre no topo da
pilha
Classe Stack
o Declarando
• Stack pilha = new Stack();
o Inserindo elementos
• pilha.push(1);
• pilha.push(2);
19/10/201014
2
1
Classe Stack
o Declarando
• Stack pilha = new Stack();
o Inserindo elementos
• pilha.push(1);
• pilha.push(2);
• pilha.push(3);
19/10/201015
3
1
2
Classe Stack
o Declarando
• Stack pilha = new Stack();
o Inserindo elementos
• pilha.push(1);
• pilha.push(2);
• pilha.push(3);
• pilha.push(4);
19/10/201016
4
1
2
3
Classe Stack
o Declarando
• Stack pilha = new Stack();
o Removendo elementos
• int item = pilha.pop();
19/10/201017
4
1
2
3
4
Lança a exceção
StackEmptyException, se
a pilha estiver vazia
Remoção ocorre no topo
da pilha
Classe Stack
o Declarando
• Stack pilha = new Stack ();
o Removendo elementos
• int item = pilha.pop();
• int item = pilha.pop();
19/10/201018
1
2
3
3
Classe Stack
o Declarando
• Stack pilha = new Stack();
o Recuperando elementos sem removê-lo da pilha
• int item = pilha.top();
19/10/201019
1
2
2
Lança a exceção
StackEmptyException, se
a pilha estiver vazia
Pilhas e Filas 20
Pilha Baseada em Arranjos
• Utiliza um arranjo S de objetos com uma capacidade
máxima estimada N
• Usa um número inteiro t para indicar o topo da pilha
• Os elementos são adicionados da esquerda para a
direita
• Lança exceção específica StackFullException
S
0 1 2 t
…
N-1
Pilhas e Filas 21
Pilha Baseada em Arranjos
• Algoritmo size()
retorne t + 1
• Algoritmo isEmpty()
retorne (t < 0)
• Algoritmo top()
se isEmpty() então lance StackEmptyException
retorne S(t)
Pilhas e Filas 22
Pilha Baseada em Arranjos
• Algoritmo push(o)
se size() = N então lance StackFullException
t ← t + 1
S[t] = o
• Algoritmo pop()
se isEmpty() então lance StackEmptyException
e ← S*t+
S[t] = null
t ← t - 1
retorne e
Pilhas e Filas 23
Classe Pilha em Java
public class ArrayStack implements Stack {
public static final int MAX = 1000;
private int N;
private Object [ ] S;
private int t = -1;
public ArrayStack() { this (MAX); }
public ArrayStack(int qtd) {
N = qtd;
S = new Object [N]; }
public int size() { return (t + 1); }
public boolean isEmpty() { return (t < 0); }
Pilhas e Filas 24
public Object top() throws StackEmptyException {
if (isEmpty()) throw new StackEmptyException (“Stack empty”);
return S[t]; }
public void push(Object o) throws StackFullException {
if (size( ) == N) throw new StackFullException (“Stack overflow”);
S[++t] = o; }
public Object pop () throws StackEmptyException {
if (isEmpty()) throw new StackEmptyException (“Stack empty”);
Object e = S[t];
S[t--] = null;
return e; }
}
Classe Pilha em Java
Pilhas e Filas 25
Desempenho e Limitações
• Desempenho
– Para uma pilha com n elementos:
– O espaço usado é O(N), N >= n
– Cada operação executa em tempo O(1)
• Limitações
– O tamanho máximo deve ser definido a priori e não pode
ser mudado
– Colocar um novo elemento numa pilha cheia causa uma
exceção específica da implementação
Pilhas e Filas 26
Pilha Crescente Baseada em Arranjo
• Em uma operação push(), quando o arranjo estiver
cheio, ao invés de levantar uma exceção,
substituímos o arranjo por um maior
• Crescimento do arranjo
– Estratégia incremental: aumentar o arranjo usando uma
constante c
– Estratégia de duplicação: duplicar o tamanho do arranjo
Pilhas e Filas 27
Pilha Crescente Baseada em Arranjo
• Algoritmo push(o)
se size() = N então
A ← novo arranjo
para i ← 0 até N-1 faça A[i] ← S*i+
S ← A
t ← t + 1
S[t] = o
N ← novo tamanho
Pilhas e Filas 28
Pilhas e a Máquina Virtual Java
• Um programa Java em execução tem uma pilha
privada, que é usada para manter as variáveis locais
e outras informações importantes dos métodos a
medida que são executados
• Durante a execução, a JVM mantém uma pilha cujos
elementos são descritores dos métodos em execução
(frames)
• A pilha Java faz passagem de parâmetros por valor
aos métodos
Pilhas e Filas 29
Pilhas e a Máquina Virtual Java
fool:
m = 7
cool:
PC = 216
j = 5
k = 7
main:
PC = 14
i = 5
main () {
int i =5
.
.
14 cool (i);
.
.
cool (int j) {
int k=7;
.
.
216 fool (k);
.
.
}
320 fool (int m) {
.
}
}
Pilha Java
Programa em Java
Pilhas e Filas 30
Pilhas e Recursão
• Pilhas podem ser usadas
para implementar a
chamada recursiva de um
método
public static long fatorial (long n) {
if (n <=1)
return 1;
else
return n*fatorial (n-1);
}
19/10/2010 31
Pilhas e Filas 32
Fila
• Contêiner onde objetos são inseridos e
removidos de acordo com o princípio:
– “o primeiro que entra é o primeiro que sai”
– FIFO – First In, First Out
ENTRADA SAÍDA
Pilhas e Filas 33
Aplicações de Fila
• Aplicações Diretas
– Filas de espera (restaurantes, passagens, etc)
– Acesso a recursos compartilhados
• Aplicações indiretas
– Estrutura de dados auxiliares para algoritmos
Pilhas e Filas 34
TAD Fila
• O TAD Fila armazena objetos arbitrários
• Inserções e remoções seguem o esquema
FIFO: inserções são feitas no fim da fila e
remoções no início
Pilhas e Filas 35
Fila - Operações
• Operações principais:
– enqueue(object): insere um elemento no fim da fila
– object dequeue(): remove e retorna o elemento do
início da fila
• Operações auxiliares:
– object front(): retorna o elemento do início sem
removê-lo
– integer size(): retorna o número de elementos
armazenados
– boolean isEmpty(): indica se há elementos na fila
Pilhas e Filas 36
Fila - Exceções
• Executar dequeue ou front em uma fila vazia
causa a exceção QueueEmptyException
Pilhas e Filas 37
Interface Fila em Java
public interface Queue {
public int size();
public boolean isEmpty();
public Object front() throws QueueEmptyException;
public void enqueue(Object o);
public Object dequeue() throws QueueEmptyException;
}
Classe Queue
o Declarando
• Queue fila= new Queue();
o Inserindo elementos
• fila. Enqueue(“João”);
19/10/2010 38
Inserção ocorre no fim da
fila
João
ENTRADA SAÍDA
Classe Queue
o Declarando
• Queue fila= new Queue();
o Inserindo elementos
• fila. Enqueue(“João”);
• fila. Enqueue(“Jose”);
19/10/2010 39
JoãoJosé
ENTRADA SAÍDA
Classe Queue
o Declarando
• Queue fila = new Queue();
o Inserindo elementos
• fila. Enqueue(“João”);
• fila. Enqueue(“Jose”);
• fila. Enqueue(“Pedro”);
19/10/2010 40
JoãoJoséPedro
ENTRADA SAÍDA
Classe Queue
o Declarando
• Queue fila= new Queue();
o Removendo elementos
• String nome = fila.Dequeue();
19/10/2010 41
JoséPedro
ENTRADA SAÍDA
Remoção ocorre no
início da filaLança a exceção
QueueEmptyException,
se a fila estiver vazia
Classe Queue
o Declarando
• Queue fila= new Queue ();
o Removendo elementos
• String nome = fila.Dequeue();
• String nome = fila.Dequeue();
19/10/2010 42
Pedro
ENTRADA SAÍDA
Pilhas e Filas 43
Fila de Inteiros
Operação Saída Início – Fila – Fim
enqueue(5) 5
enqueue(3) 5, 3
dequeue() 5 3
enqueue(7) 3, 7
size() 2 3, 7
dequeue() 3 7
front() 7 7
dequeue() 7 -
dequeue() Erro -
isEmpty() True -
Pilhas e Filas 44
Fila Baseada em Arranjos
• Utiliza um arranjo Q de tamanho N de forma circular
• Duas variáveis mantém informações de início e fim da fila
– f : índice do elemento do início (front), inicia em 0
– r : índice da próxima posição livre (rear), inicia em 0
– f = r implica em fila vazia
• Lança exceção específica QueueFullException
Configuração normal: f ≤ r
Configuração reversa: f > r
Q
0 1 2 rf N-1
Q
0 1 2 fr N-1
Pilhas e Filas 45
Fila Baseada em Arranjos
• Algoritmo size()
retorne (N – f + r) % N
• Algoritmo isEmpty()
retorne (f = r)
• Algoritmo front()
se isEmpty() então lançar QueueEmptyException
retorne Q(f)
Pilhas e Filas 46
Fila Baseada em Arranjos
• Algoritmo enqueue(o)
se size() = N-1 então lançar QueueFullException
Q[r] = o
r ← (r + 1) % N
• Algoritmo dequeue()
se isEmpty() então lançar QueueEmptyException
e ← Q*f+
Q[f] = null
f ← (f + 1) % N
retorne e
Pilhas e Filas 47
Desempenho e Limitações
• Desempenho
– Para uma fila com n elementos:
– O espaço usado é O(N), N >= n
– Cada operação executa em tempo O(1)
• Limitações
– O tamanho máximo deve ser definido a priori e não pode
ser mudado
– Colocar um novo elemento numa fila cheia causa uma
exceção específica da implementação
Pilhas e Filas 48
Exercícios
1. Descreva a saída da seguinte seqüência de operações sobre
uma pilha de inteiros:
– push(5), push(3), pop(), push(2), push(8), pop(), pop(), push(9),
push(1), pop(), push(7), push(6), pop(), pop(), push(4), pop(), pop()
2. Descreva a saída da seguinte seqüência de operações sobre
uma fila de inteiros:
– enqueue(5), enqueue(3), dequeue(), enqueue(2), enqueue(8),
dequeue(), dequeue(), enqueue(9), enqueue(1), dequeue(),
enqueue(7), enqueue(6), dequeue(), dequeue(), enqueue(4),
dequeue(), dequeue()
Pilhas e Filas 49
Exercícios
3. Implemente a interface Stack e a classe ArrayStack em Java. Utilize a
classe para criar uma pilha de inteiros e execute a seqüência de
operações do exercício 1.
4. Implemente uma classe, baseada na interface Stack, que controle o
crescimento de um arranjo utilizado para armazenar os elementos da
pilha. O arranjo deve possuir as seguintes características:
• iniciar com tamanho unitário
• dobrar de tamanho quando sua capacidade de armazenamento
esgotar
• diminuir pela metade quando apenas 25 % de sua capacidade
estiver sendo utilizada.
Pilhas e Filas 50
Exercícios
5. Implemente a interface Queue e uma classe baseada neste interface.
Utilize a classe para criar uma fila de inteiros e execute a seqüência de
operações do exercício 2.
6. Implemente uma classe para representar uma fila onde todos os
elementos são necessariamente do tipo String.
Pilhas e Filas 51
Referência Bibliográfica
• Estrutura de Dados e Algoritmos em Java
– Michael T. Goodrich
– Roberto Tamassia
• www.datastructures.net

Contenu connexe

Tendances

Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasAdriano Teixeira de Souza
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesLeinylson Fontinele
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisFabrício Lopes Sanchez
 
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Leinylson Fontinele
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Estrutura de Dados - Aula de revisão de C na prática
Estrutura de Dados - Aula de revisão de C na práticaEstrutura de Dados - Aula de revisão de C na prática
Estrutura de Dados - Aula de revisão de C na práticaLeinylson Fontinele
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Leinylson Fontinele
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADLeinylson Fontinele
 
Pesquisa e Ordenação Aula 01 - Apresentação
Pesquisa e Ordenação Aula 01 - ApresentaçãoPesquisa e Ordenação Aula 01 - Apresentação
Pesquisa e Ordenação Aula 01 - ApresentaçãoLeinylson Fontinele
 
Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasEstrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasLeinylson Fontinele
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeRegis Magalhães
 
Aula 5 encapsulamento, associação, polimorfismo, interfaces
Aula 5   encapsulamento, associação, polimorfismo, interfacesAula 5   encapsulamento, associação, polimorfismo, interfaces
Aula 5 encapsulamento, associação, polimorfismo, interfacesRafael Pinheiro
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHASAparicio Junior
 

Tendances (20)

Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e Funções
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Estrutura de Dados - Aula de revisão de C na prática
Estrutura de Dados - Aula de revisão de C na práticaEstrutura de Dados - Aula de revisão de C na prática
Estrutura de Dados - Aula de revisão de C na prática
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Estrutura de Dados - Ponteiros
Estrutura de Dados - PonteirosEstrutura de Dados - Ponteiros
Estrutura de Dados - Ponteiros
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
Data structure stack&queue basics
Data structure stack&queue   basicsData structure stack&queue   basics
Data structure stack&queue basics
 
Pesquisa e Ordenação Aula 01 - Apresentação
Pesquisa e Ordenação Aula 01 - ApresentaçãoPesquisa e Ordenação Aula 01 - Apresentação
Pesquisa e Ordenação Aula 01 - Apresentação
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasEstrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas Estáticas
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 Recursividade
 
Aula 5 encapsulamento, associação, polimorfismo, interfaces
Aula 5   encapsulamento, associação, polimorfismo, interfacesAula 5   encapsulamento, associação, polimorfismo, interfaces
Aula 5 encapsulamento, associação, polimorfismo, interfaces
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHAS
 

En vedette

Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
JavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em DesenvolvimentoJavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em DesenvolvimentoEduardo Bregaida
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeRafael Ponte
 
Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)Rafael Ponte
 
Estrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoEstrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoLeinylson Fontinele
 
Engenharia de Software - Introdução e Motivação (Marcello Thiry)
Engenharia de Software - Introdução e Motivação (Marcello Thiry)Engenharia de Software - Introdução e Motivação (Marcello Thiry)
Engenharia de Software - Introdução e Motivação (Marcello Thiry)Marcello Thiry
 
Eng.ª do Software - 3. Processos da engenharia de requisitos
Eng.ª do Software - 3. Processos da engenharia de requisitosEng.ª do Software - 3. Processos da engenharia de requisitos
Eng.ª do Software - 3. Processos da engenharia de requisitosManuel Menezes de Sequeira
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De SoftwareCursoSENAC
 
Verificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareVerificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareCamilo Almendra
 
Engenharia de Software Ágil (Scrum e FDD)
Engenharia de Software Ágil (Scrum e FDD)Engenharia de Software Ágil (Scrum e FDD)
Engenharia de Software Ágil (Scrum e FDD)Rildo (@rildosan) Santos
 
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Sérgio Souza Costa
 
Engenharia de Software 100% Agil (SCRUM, FDD e XP)
Engenharia de Software 100% Agil (SCRUM, FDD e XP)Engenharia de Software 100% Agil (SCRUM, FDD e XP)
Engenharia de Software 100% Agil (SCRUM, FDD e XP)Rildo (@rildosan) Santos
 

En vedette (16)

Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Apostila jsf
Apostila jsfApostila jsf
Apostila jsf
 
JavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em DesenvolvimentoJavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em Desenvolvimento
 
Introdução a jsf
Introdução a jsfIntrodução a jsf
Introdução a jsf
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividade
 
Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)
 
Estruturas de dados
Estruturas de dadosEstruturas de dados
Estruturas de dados
 
Estrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoEstrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - Apresentação
 
Engenharia de Software - Introdução e Motivação (Marcello Thiry)
Engenharia de Software - Introdução e Motivação (Marcello Thiry)Engenharia de Software - Introdução e Motivação (Marcello Thiry)
Engenharia de Software - Introdução e Motivação (Marcello Thiry)
 
Eng.ª do Software - 3. Processos da engenharia de requisitos
Eng.ª do Software - 3. Processos da engenharia de requisitosEng.ª do Software - 3. Processos da engenharia de requisitos
Eng.ª do Software - 3. Processos da engenharia de requisitos
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De Software
 
Verificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareVerificação, Validação e Teste de Software
Verificação, Validação e Teste de Software
 
Engenharia de Software Ágil (Scrum e FDD)
Engenharia de Software Ágil (Scrum e FDD)Engenharia de Software Ágil (Scrum e FDD)
Engenharia de Software Ágil (Scrum e FDD)
 
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
 
Engenharia de Software 100% Agil (SCRUM, FDD e XP)
Engenharia de Software 100% Agil (SCRUM, FDD e XP)Engenharia de Software 100% Agil (SCRUM, FDD e XP)
Engenharia de Software 100% Agil (SCRUM, FDD e XP)
 

Similaire à Pilha e filas (20)

Pilhas java
Pilhas javaPilhas java
Pilhas java
 
Aula 8
Aula 8Aula 8
Aula 8
 
Aula02 Pilhas
Aula02   PilhasAula02   Pilhas
Aula02 Pilhas
 
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
 
Slides pilhas e_filas
Slides  pilhas e_filasSlides  pilhas e_filas
Slides pilhas e_filas
 
Aula 9
Aula 9Aula 9
Aula 9
 
Aula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopAula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oop
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
 
Aula 10
Aula 10 Aula 10
Aula 10
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.ppt
 
Pged 05
Pged 05Pged 05
Pged 05
 
Pilha
PilhaPilha
Pilha
 
Coleções do c
Coleções do cColeções do c
Coleções do c
 
Coleções do c
Coleções do cColeções do c
Coleções do c
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Pilha ad
Pilha adPilha ad
Pilha ad
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Java 07
Java 07Java 07
Java 07
 
java_avancado.pdf
java_avancado.pdfjava_avancado.pdf
java_avancado.pdf
 

Pilha e filas

  • 1. Estruturas de Dados em Java Pilha e Fila Crédito: Prof. Gilbert Azevedo Adaptações: Prof. Jailton Carlos Jailton.paiva@ifrn.edu.br 19/10/2010 1
  • 2. OBJETIVO DA AULA DE HOJE 19/10/2010 2 Compreender e aplicar os conceitos de Pilha e Fila em Java
  • 3. Boxing e Unboxing • Ao inserir um inteiro num ArrayList, é executado um boxing • Da mesma forma, quando este valor é lido, um unboxing é necessário. 3 ArrayList Lista = new ArrayList(); int i = 1; Lista.Add(i); int j = (int)Lista[0]; Todo esse procedimento gera um overhead, que degrada a performance dos aplicativos
  • 5. Pilha 19/10/2010 5 • Contêiner onde objetos são inseridos e retirados de acordo com o princípio: – “o último que entra é o primeiro que sai” – LIFO – Last In, First Out
  • 6. Pilhas e Filas 6 Aplicações de Pilha • Aplicações diretas – Histórico de páginas visitadas em um navegador – Seqüência de desfazer em um editor de textos – Cadeia de chamada de métodos em um programa • Aplicações indiretas – Estrutura de dados auxiliares para algoritmos
  • 7. Pilhas e Filas 7 Tipo Abstrato de Dados (TAD) • Um TAD é uma abstração de uma estrutura de dados • Um TAD especifica: – Dados armazenados – Operações realizadas sobre os dados – Condições de erros associadas às operações • O TAD Pilha armazena objetos genéricos
  • 8. Pilhas e Filas 8 Pilha - Operações • Principais – push(object): insere um elemento na pilha – object pop(): remove e retorna o último elemento inserido • Auxiliares – object top(): retorna o último elemento inserido sem removê-lo – integer size(): retorna o número de elementos armazenados – boolean isEmpty(): indica se há ou não elementos na pilha
  • 9. Pilhas e Filas 9 Pilha de Inteiros Operação Saída Início – Pilha – Fim push(5) 5 push(3) 5, 3 pop() 3 5 push(7) 5, 7 size() 2 5, 7 pop() 7 5 top() 5 5 pop() 5 - pop() Erro - isEmpty() True -
  • 10. Pilhas e Filas 10 Pilha - Exceções • Ao executar uma operação em um TAD, podemos causar uma condição de erro, que chamamos exceção • Exceções podem ser levantadas (thrown) por uma operação que não pode ser executada • No TAD Pilha, as operações pop e top não podem ser realizadas se a pilha estiver vazia • Executar pop ou top em uma pilha vazia causa a exceção StackEmptyException
  • 11. Pilhas e Filas 11 Pilha em Java • Por sua importância, a estrutura de dados Pilha é uma classe “embutida” no pacote java.util • A classe java.util.Stack é uma estrutura de dados que armazena objetos Java genéricos e inclui, entre outros, os métodos: – push(obj), pop(), peek(), size() e empty() • Contudo, é importante, aprender como implementar uma pilha desde o início
  • 12. Pilhas e Filas 12 Interface Pilha em Java public interface Stack { public int size(); public boolean isEmpty(); public Object top() throws StackEmptyException; public void push(Object o); public Object pop() throws StackEmptyException; }
  • 13. Classe Stack o Declarando • Stack pilha = new Stack(); o Inserindo elementos • pilha.push(1); 19/10/201013 1 Inserção ocorre no topo da pilha
  • 14. Classe Stack o Declarando • Stack pilha = new Stack(); o Inserindo elementos • pilha.push(1); • pilha.push(2); 19/10/201014 2 1
  • 15. Classe Stack o Declarando • Stack pilha = new Stack(); o Inserindo elementos • pilha.push(1); • pilha.push(2); • pilha.push(3); 19/10/201015 3 1 2
  • 16. Classe Stack o Declarando • Stack pilha = new Stack(); o Inserindo elementos • pilha.push(1); • pilha.push(2); • pilha.push(3); • pilha.push(4); 19/10/201016 4 1 2 3
  • 17. Classe Stack o Declarando • Stack pilha = new Stack(); o Removendo elementos • int item = pilha.pop(); 19/10/201017 4 1 2 3 4 Lança a exceção StackEmptyException, se a pilha estiver vazia Remoção ocorre no topo da pilha
  • 18. Classe Stack o Declarando • Stack pilha = new Stack (); o Removendo elementos • int item = pilha.pop(); • int item = pilha.pop(); 19/10/201018 1 2 3 3
  • 19. Classe Stack o Declarando • Stack pilha = new Stack(); o Recuperando elementos sem removê-lo da pilha • int item = pilha.top(); 19/10/201019 1 2 2 Lança a exceção StackEmptyException, se a pilha estiver vazia
  • 20. Pilhas e Filas 20 Pilha Baseada em Arranjos • Utiliza um arranjo S de objetos com uma capacidade máxima estimada N • Usa um número inteiro t para indicar o topo da pilha • Os elementos são adicionados da esquerda para a direita • Lança exceção específica StackFullException S 0 1 2 t … N-1
  • 21. Pilhas e Filas 21 Pilha Baseada em Arranjos • Algoritmo size() retorne t + 1 • Algoritmo isEmpty() retorne (t < 0) • Algoritmo top() se isEmpty() então lance StackEmptyException retorne S(t)
  • 22. Pilhas e Filas 22 Pilha Baseada em Arranjos • Algoritmo push(o) se size() = N então lance StackFullException t ← t + 1 S[t] = o • Algoritmo pop() se isEmpty() então lance StackEmptyException e ← S*t+ S[t] = null t ← t - 1 retorne e
  • 23. Pilhas e Filas 23 Classe Pilha em Java public class ArrayStack implements Stack { public static final int MAX = 1000; private int N; private Object [ ] S; private int t = -1; public ArrayStack() { this (MAX); } public ArrayStack(int qtd) { N = qtd; S = new Object [N]; } public int size() { return (t + 1); } public boolean isEmpty() { return (t < 0); }
  • 24. Pilhas e Filas 24 public Object top() throws StackEmptyException { if (isEmpty()) throw new StackEmptyException (“Stack empty”); return S[t]; } public void push(Object o) throws StackFullException { if (size( ) == N) throw new StackFullException (“Stack overflow”); S[++t] = o; } public Object pop () throws StackEmptyException { if (isEmpty()) throw new StackEmptyException (“Stack empty”); Object e = S[t]; S[t--] = null; return e; } } Classe Pilha em Java
  • 25. Pilhas e Filas 25 Desempenho e Limitações • Desempenho – Para uma pilha com n elementos: – O espaço usado é O(N), N >= n – Cada operação executa em tempo O(1) • Limitações – O tamanho máximo deve ser definido a priori e não pode ser mudado – Colocar um novo elemento numa pilha cheia causa uma exceção específica da implementação
  • 26. Pilhas e Filas 26 Pilha Crescente Baseada em Arranjo • Em uma operação push(), quando o arranjo estiver cheio, ao invés de levantar uma exceção, substituímos o arranjo por um maior • Crescimento do arranjo – Estratégia incremental: aumentar o arranjo usando uma constante c – Estratégia de duplicação: duplicar o tamanho do arranjo
  • 27. Pilhas e Filas 27 Pilha Crescente Baseada em Arranjo • Algoritmo push(o) se size() = N então A ← novo arranjo para i ← 0 até N-1 faça A[i] ← S*i+ S ← A t ← t + 1 S[t] = o N ← novo tamanho
  • 28. Pilhas e Filas 28 Pilhas e a Máquina Virtual Java • Um programa Java em execução tem uma pilha privada, que é usada para manter as variáveis locais e outras informações importantes dos métodos a medida que são executados • Durante a execução, a JVM mantém uma pilha cujos elementos são descritores dos métodos em execução (frames) • A pilha Java faz passagem de parâmetros por valor aos métodos
  • 29. Pilhas e Filas 29 Pilhas e a Máquina Virtual Java fool: m = 7 cool: PC = 216 j = 5 k = 7 main: PC = 14 i = 5 main () { int i =5 . . 14 cool (i); . . cool (int j) { int k=7; . . 216 fool (k); . . } 320 fool (int m) { . } } Pilha Java Programa em Java
  • 30. Pilhas e Filas 30 Pilhas e Recursão • Pilhas podem ser usadas para implementar a chamada recursiva de um método public static long fatorial (long n) { if (n <=1) return 1; else return n*fatorial (n-1); }
  • 32. Pilhas e Filas 32 Fila • Contêiner onde objetos são inseridos e removidos de acordo com o princípio: – “o primeiro que entra é o primeiro que sai” – FIFO – First In, First Out ENTRADA SAÍDA
  • 33. Pilhas e Filas 33 Aplicações de Fila • Aplicações Diretas – Filas de espera (restaurantes, passagens, etc) – Acesso a recursos compartilhados • Aplicações indiretas – Estrutura de dados auxiliares para algoritmos
  • 34. Pilhas e Filas 34 TAD Fila • O TAD Fila armazena objetos arbitrários • Inserções e remoções seguem o esquema FIFO: inserções são feitas no fim da fila e remoções no início
  • 35. Pilhas e Filas 35 Fila - Operações • Operações principais: – enqueue(object): insere um elemento no fim da fila – object dequeue(): remove e retorna o elemento do início da fila • Operações auxiliares: – object front(): retorna o elemento do início sem removê-lo – integer size(): retorna o número de elementos armazenados – boolean isEmpty(): indica se há elementos na fila
  • 36. Pilhas e Filas 36 Fila - Exceções • Executar dequeue ou front em uma fila vazia causa a exceção QueueEmptyException
  • 37. Pilhas e Filas 37 Interface Fila em Java public interface Queue { public int size(); public boolean isEmpty(); public Object front() throws QueueEmptyException; public void enqueue(Object o); public Object dequeue() throws QueueEmptyException; }
  • 38. Classe Queue o Declarando • Queue fila= new Queue(); o Inserindo elementos • fila. Enqueue(“João”); 19/10/2010 38 Inserção ocorre no fim da fila João ENTRADA SAÍDA
  • 39. Classe Queue o Declarando • Queue fila= new Queue(); o Inserindo elementos • fila. Enqueue(“João”); • fila. Enqueue(“Jose”); 19/10/2010 39 JoãoJosé ENTRADA SAÍDA
  • 40. Classe Queue o Declarando • Queue fila = new Queue(); o Inserindo elementos • fila. Enqueue(“João”); • fila. Enqueue(“Jose”); • fila. Enqueue(“Pedro”); 19/10/2010 40 JoãoJoséPedro ENTRADA SAÍDA
  • 41. Classe Queue o Declarando • Queue fila= new Queue(); o Removendo elementos • String nome = fila.Dequeue(); 19/10/2010 41 JoséPedro ENTRADA SAÍDA Remoção ocorre no início da filaLança a exceção QueueEmptyException, se a fila estiver vazia
  • 42. Classe Queue o Declarando • Queue fila= new Queue (); o Removendo elementos • String nome = fila.Dequeue(); • String nome = fila.Dequeue(); 19/10/2010 42 Pedro ENTRADA SAÍDA
  • 43. Pilhas e Filas 43 Fila de Inteiros Operação Saída Início – Fila – Fim enqueue(5) 5 enqueue(3) 5, 3 dequeue() 5 3 enqueue(7) 3, 7 size() 2 3, 7 dequeue() 3 7 front() 7 7 dequeue() 7 - dequeue() Erro - isEmpty() True -
  • 44. Pilhas e Filas 44 Fila Baseada em Arranjos • Utiliza um arranjo Q de tamanho N de forma circular • Duas variáveis mantém informações de início e fim da fila – f : índice do elemento do início (front), inicia em 0 – r : índice da próxima posição livre (rear), inicia em 0 – f = r implica em fila vazia • Lança exceção específica QueueFullException Configuração normal: f ≤ r Configuração reversa: f > r Q 0 1 2 rf N-1 Q 0 1 2 fr N-1
  • 45. Pilhas e Filas 45 Fila Baseada em Arranjos • Algoritmo size() retorne (N – f + r) % N • Algoritmo isEmpty() retorne (f = r) • Algoritmo front() se isEmpty() então lançar QueueEmptyException retorne Q(f)
  • 46. Pilhas e Filas 46 Fila Baseada em Arranjos • Algoritmo enqueue(o) se size() = N-1 então lançar QueueFullException Q[r] = o r ← (r + 1) % N • Algoritmo dequeue() se isEmpty() então lançar QueueEmptyException e ← Q*f+ Q[f] = null f ← (f + 1) % N retorne e
  • 47. Pilhas e Filas 47 Desempenho e Limitações • Desempenho – Para uma fila com n elementos: – O espaço usado é O(N), N >= n – Cada operação executa em tempo O(1) • Limitações – O tamanho máximo deve ser definido a priori e não pode ser mudado – Colocar um novo elemento numa fila cheia causa uma exceção específica da implementação
  • 48. Pilhas e Filas 48 Exercícios 1. Descreva a saída da seguinte seqüência de operações sobre uma pilha de inteiros: – push(5), push(3), pop(), push(2), push(8), pop(), pop(), push(9), push(1), pop(), push(7), push(6), pop(), pop(), push(4), pop(), pop() 2. Descreva a saída da seguinte seqüência de operações sobre uma fila de inteiros: – enqueue(5), enqueue(3), dequeue(), enqueue(2), enqueue(8), dequeue(), dequeue(), enqueue(9), enqueue(1), dequeue(), enqueue(7), enqueue(6), dequeue(), dequeue(), enqueue(4), dequeue(), dequeue()
  • 49. Pilhas e Filas 49 Exercícios 3. Implemente a interface Stack e a classe ArrayStack em Java. Utilize a classe para criar uma pilha de inteiros e execute a seqüência de operações do exercício 1. 4. Implemente uma classe, baseada na interface Stack, que controle o crescimento de um arranjo utilizado para armazenar os elementos da pilha. O arranjo deve possuir as seguintes características: • iniciar com tamanho unitário • dobrar de tamanho quando sua capacidade de armazenamento esgotar • diminuir pela metade quando apenas 25 % de sua capacidade estiver sendo utilizada.
  • 50. Pilhas e Filas 50 Exercícios 5. Implemente a interface Queue e uma classe baseada neste interface. Utilize a classe para criar uma fila de inteiros e execute a seqüência de operações do exercício 2. 6. Implemente uma classe para representar uma fila onde todos os elementos são necessariamente do tipo String.
  • 51. Pilhas e Filas 51 Referência Bibliográfica • Estrutura de Dados e Algoritmos em Java – Michael T. Goodrich – Roberto Tamassia • www.datastructures.net