Filas

Propaganda
6. Implementação de Fila
É uma lista onde a inserção é realizada em uma extremidade e a retirada na outra.
Critério “FIFO” First In First Out (primeiro que entra, primeiro que sai)
6.1. Principais Operações
•
Insere (enqueue)
•
Retira (dequeue)
•
estaCheia
•
estaVazia
•
consulta
6.2. Representação por contigüidade física
v: vetor de nodos
frente: índice do nodo que está no início da fila
ré: índice do nodo que está no fim da fila
Condição Inicial: Torna a inclusão do primeiro nodo igual as demais
Inserir na Fila
f.insere(10)
Quando Frente=Ré a fila possui 1 nodo
28
f.insere(20)
f.insere(30)
Retirar
X=f.retira()
Como verificar se a fila está vazia? Ré < Frente
Como verificar se a fila está cheia? v.length -1
(capacidade do vetor)
Observação: Nesta implementação não há reaproveitamento de espaço já ocupado.
Existe uma situação em que a fila torna-se cheia e vazia ao mesmo tempo?
X=f.retira()
Ré < Frente: Fila vazia
Ré = v.length: Fila cheia
29
Como melhorar a implementação?
1) Deslocando os nodos para o início do vetor a cada retirada.
2) Deslocando os nodos para o início do vetor na situação de lista cheia
Fila CHEIA
f.insere(24)
3) Implementando um fila circular.
6.3. Fila Circular
O último elemento é considerado adjacente ao primeiro.
Como verificar se a fila está vazia? tam=0
Como verificar se a fila está cheia? tam=v.length
30
6.4. Implementando uma Fila com LinkedList
Existe uma interface que define a estrutura de dados Fila. Essa interface chama-se Queue,
umas das classes que implementam Queue é a LinkedList.
Exemplo:
import java.util.LinkedList;
import java.util.Queue;
public class ExemploFila {
public static void main(String[] args) {
Queue fila = new LinkedList();
Aluno a1 = new Aluno(1000,"Ana");
Aluno a2 = new Aluno(1001,"Beatriz");
Aluno a3 = new Aluno(1002,"Carlos");
fila.offer(a1);
fila.offer(a2);
fila.offer(a3);
fila.poll();
if(fila.isEmpty()){
System.out.println("A fila está vazia");
}else {
System.out.println(fila);
}
}
}
6.5. Implementando uma Fila de prioridade com PriorityQueue
Fila de prioridade é uma “fila” onde os nodos são retirados em uma ordem determinada.
Ascendente: Apenas o menor elemento pode ser removido.
Descendente: Apenas o maior elemento pode ser removido.
X= f.retira()
31
Classe PriorityQueue
Método
PriorityQueue()
Cria uma fila de prioridade com capacidade inicial de
11 nodos.
public boolean add (Object obj)
Adiciona um nodo na fila. Retorna true.
Exceções:
NullPointerExeception – se o elemento é null
ClassCastExeception – se o elemento não pode ser
comparado com os elementos que estão na fila.
public Object poll()
Consulta e remove um nodo da fila. Retorna null se a
fila está vazia
Exemplo
import java.util.PriorityQueue;
public class Exemplo11{
public static void main(String args[]){
PriorityQueue fila = new PriorityQueue();
Integer dado;
fila.add(new Integer(40));
fila.add(new Integer(10));
fila.add(new Integer(60));
System.out.println(fila);
dado = (Integer) fila.poll();
while(dado!=null){
System.out.println(dado);
dado = (Integer) fila.poll();
}
}
}
32
Download