Você está na página 1de 23

Filas

Observao: Material elaborado a partir do material do Professor Marcos Costa.

Filas

Numa

fila, os elementos so inseridos e retirados de acordo com o princpio o primeiro que entra o primeiro que sai
FIFO

(First In First Out)

Filas
Um

modelo intuitivo de uma fila o de uma fila em frente a um balco


Em

que a pessoa que est no incio servida primeiro, e as pessoas que chegam entram no fim da fila

Filas Utilizao
Filas

de impresso

Filas Utilizao
Sistemas

operacionais utilizam filas para regular a ordem na qual as tarefas devem receber processamento, e recursos devem ser alocados a processos

Filas Insero
A insero de um elemento em uma fila (enqueue)

16

10

Os elementos so inseridos sempre no final da fila

Filas Remoo
A remoo de um elemento em uma fila (dequeue)

4 4

4 16

4 10

Os elementos so removidos sempre do comeo da fila

Filas Implementao
Podemos

implementar uma fila em um arranjo de forma circular


Possuindo

ndices para o primeiro elemento e para a prxima posio livre da fila

Fila - Implementao
Inicialmente

os ndices de primeiro elemento e prxima posio livre possuem valor 0 (fila vazia)

3 4

...

N-1

Fila - Implementao
Ao

inserirmos um elemento no final da fila, o ndice da prxima posio livre deslocado de uma posio
...

0 1

4 5

6 7

...

N-1

Fila - Implementao
Ao

removermos um elemento do incio da fila, o ndice para o primeiro elemento deslocado de uma posio
...

0 1

4 5

6 7

...

N-1

Fila Implementao

Se

chamarmos o ndice do primeiro elemento de head e chamarmos o ndice da prxima posio livre de tail
Sempre

que head == tail a fila estar vazia

Fila Implementao
Como
Para

o arranjo circular

deslocar os ndices em uma posio, preciso fazer


tail

= (tail + 1) MOD N head = (head + 1) MOD N N o tamanho do arranjo MOD a operao de resto da diviso

Fila Implementao
Mas

quando a fila estiver cheia, temos que head == tail tambm!!!

0 1

5 6

...

N-1

Fila Implementao
Para

evitar este problema, uma posio necessariamente ter que ficar sempre livre
Na

figura abaixo, temos a fila cheia

0 1

5 6

...

N-1

Fila Implementao
Para

saber o nmero de elementos da


+ tail head) MOD N

fila
(N

(8 + 3 4) MOD 8 = 7

0 1

5 6

O TAD Queue
Mtodo enqueue Especificao Insere um elemento no final da fila Entrada: o elemento a ser inserido. Sada: nenhuma Remove o elemento do comeo da fila Entrada: nenhuma. Sada: o elemento removido Retorna o elemento do comeo da pilha Entrada: nenhuma. Sada: o elemento que est no comeo da pilha Exceo Se a fila estiver cheia Se a fila estiver vazia Se a fila estiver vazia

dequeue

front

O TAD Queue

Mtodo getSize

Especificao Entrada: nenhuma. Sada: o nmero de elementos da fila Entrada: nenhuma. Sada: true se a fila estiver vazia. Caso contrrio, false.

Exceo No

isEmpty

No

O TAD Queue

Supondo
Que

que foi criada uma fila utilizando um arranjo circular


armazena no mximo 5 elementos

O TAD Queue
Mtodo enqueue(5) enqueue(3) dequeue() enqueue(7) dequeue() front() dequeue() dequeue() front() isEmpty() enqueue(9) Sada fila

O TAD Queue
Mtodo enqueue(5) enqueue(3) enqueue(10) getSize() enqueue(7) enqueue(8) Queue overflow 4 Sada Pilha {9,5} {9,5,3} {9,5,3,10} {9,5,3,10} {9,5,3,10,7} {9,5,3,10,7}

Exerccio Individual

Implemente
Para

um TAD Fila de inteiros em Java utilizando um arranjo circular


armazenar os elementos da fila Utilize o cdigo base especificado

Cdigo Queue
class Queue { //Constri a fila com uma capacidade. A capacidade equivale ao //nmero mximo de elementos da pilha. Queue(int capacity) { }; void enqueue(int element) { }; int dequeue() { } int front() { } int getSize() { } bool isEmpty() { } string toString() { } private int capacity; private int head; private int tail; };