Você está na página 1de 5

6.

Implementao de Fila
uma lista onde a insero realizada em uma extremidade e a retirada na outra.

Critrio FIFO First In First Out (primeiro que entra, primeiro que sai)

6.1. Principais Operaes


Insere (enqueue) Retira (dequeue) estaCheia estaVazia consulta

6.2. Representao por contigidade fsica


v: vetor de nodos frente: ndice do nodo que est no incio da fila r: ndice do nodo que est no fim da fila Condio Inicial: Torna a incluso 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) Observao: Nesta implementao no h reaproveitamento de espao j ocupado. Existe uma situao 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 implementao? 1) Deslocando os nodos para o incio do vetor a cada retirada.

2) Deslocando os nodos para o incio do vetor na situao 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 so 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 Mtodo PriorityQueue() Cria uma fila de prioridade com capacidade inicial de 11 nodos. Adiciona um nodo na fila. Retorna true. Excees: NullPointerExeception se o elemento null ClassCastExeception se o elemento no pode ser comparado com os elementos que esto na fila. public Object poll() Consulta e remove um nodo da fila. Retorna null se a fila est vazia

public boolean add (Object obj)

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

Você também pode gostar