O documento discute filas como uma estrutura de dados, definindo filas como uma estrutura FIFO onde os itens são inseridos no final e removidos do início. Ele fornece exemplos de implementação de filas em Java com métodos como push(), pop(), front(), size() e empty()/full().
2. FILAS
A maneira mais fácil de visualizar uma fila é pensar
em clientes alinhados, esperando por um serviço
A próxima pessoa a ser atendida é a que esperou por
mais tempo, e os que chegaram posteriormente
são colocados no fim da fila.
2
3. Usa o princípio de que o primeiro que entra
é o primeiro que sai.
First In, First Out (FIFO)
Necessita de controle de acesso do
elementos do fim e inicio (zero)
Exemplos
3
5. Classe
push (enqueue): Insere itens na fila (ao final)
pop (dequeue): Retira itens da fila (primeiro item)
front: Retorna o próximo item da fila sem retira-lo (consulta)
empty: Verifica se a fila esta vazia
full: Verifica se a fila esta cheia
size: Retorna o tamanho da fila
Métodos
Campos Construtor
public Fila(int n) {
itens = new long[n];
tam_max = n;
fim = 0;
}
int fim;
int tam_max;
long[] itens;
5
6. 6
Aplicação
Em Sistemas Operacionais filas são utilizadas:
Para controlar as tarefas que esperam por um
recurso e
Para assegurar que as mesmas serão realizadas
7. PUSH (enqueue)
Algoritmo 1
Entrada: Valor do item a ser adicionado na fila (valor)
Saída: Não tem retorno
inicio
itens[ fim ] valor
fim fim + 1
fim
1
2
3
4
Em Java
public void push(long valor) {
itens[ fim ] = valor;
fim++;
} 7
8. Retornar o próximo item da
fila, sem remove-lo
FRONT
Algoritmo 2
Entrada: não há
Saída: item da frente
inicio
retorne itens[0]
fim
1
2
3
Em Java
public long front() {
return itens[0];
} 8
9. Retornar o tamanho da fila
SIZE
Algoritmo 3
Entrada: não há
Saída: tamanho da fila (int)
inicio
retorne fim ;
fim
1
2
3
Em Java
public int size() {
return fim;
} 9
10. Verificar se a fila esta vazia
EMPTY
Algoritmo 4
Entrada: não há
Saída: verdadeiro ou falso
inicio
retorne ( fim = 0 );
fim
1
2
3
Em Java
public boolean empty() {
return ( fim == 0 );
} 10
11. Verificar se a fila esta cheia
FULL
Algoritmo 5
Entrada: não há
Saída: verdadeiro ou falso
inicio
retorne ( fim = tam_max );
fim
1
2
3
Em Java
public boolean full() {
return ( fim == tam_max );
} 11
12. POP (dequeue)
Algoritmo 6
Entrada: não há
Saída: não há
inicio
for i from 0 to fim-1 step 1 do
itens[i] itens[i + 1]
endfor
fim fim – 1
itens[fim] NULL
fim
1
2
3
4
5
6
7
Em Java
public void pop() {
for (int i=0; i<(fim-1); i++)
itens[i] = itens[i+1];
fim--;
itens[fim] = 0;
}
Fila andando
Atribuindo
nulo na ultima
posição
12
13. 13
Fila Andando
A cada passo do
laço for:
Um a um os
elementos serão
atribuídos a posição
“anterior” na fila
i=0 i=1 i=2 i=3 i=4
i=0
public void pop() {
for (int i=0; i<(fim-1); i++)
itens[i] = itens[i+1];
fim--;
itens[fim] = 0;
}
14. 14
A cada passo do
laço for:
Um a um os
elementos serão
atribuídos a posição
“anterior” na fila
i=0 i=1
Fila Andando
i=0 i=1 i=2 i=3 i=4
public void pop() {
for (int i=0; i<(fim-1); i++)
itens[i] = itens[i+1];
fim--;
itens[fim] = 0;
}
15. 15
A cada passo do
laço for:
Um a um os
elementos serão
atribuídos a posição
“anterior” na fila
i=0 i=1 i=2
Fila Andando
i=0 i=1 i=2 i=3 i=4
public void pop() {
for (int i=0; i<(fim-1); i++)
itens[i] = itens[i+1];
fim--;
itens[fim] = 0;
}
16. 16
A cada passo do
laço for:
Um a um os
elementos serão
atribuídos a posição
“anterior” na fila
i=0 i=1 i=2 i=3
Fila Andando
i=0 i=1 i=2 i=3 i=4
public void pop() {
for (int i=0; i<(fim-1); i++)
itens[i] = itens[i+1];
fim--;
itens[fim] = 0;
}
17. Atribuindo NULL
Atribuindo NULO a
ultima posição
i=0 i=1 i=2 i=3 i=4
0
i=0 i=1 i=2 i=3 i=4
public void pop() {
for (int i=0; i<(fim-1); i++)
itens[i] = itens[i+1];
fim--;
itens[fim] = 0;
}
17
19. class Fila {
private long[] itens;
private int fim;
private int tam_max;
public Fila (int n) { // construtor
itens = new long[n];
tam_max = n;
fim=0;
}
public void push(long valor) { // insere itens na fila
itens [ fim ] = valor; // insere no final
fim++;
}
// Continua ...
19
20. // Continuação...
public void pop() { // retira itens da fila (inicio)
for(int i = 0; i < (fim-1); i++)
itens[ i ] = itens[ i+1 ]; // caminha fila
fim--;
itens[fim] = 0;
}
public long front() { // retorna item da frente (consulta)
return itens[ 0 ];
}
public boolean empty() { // esta vazia?
return ( fim == 0 );
}
public boolean full() { // esta cheia?
return (fim == tam_max );
}
// Continua ...20
21. // Continuação ...
public int size() { // retorna tamanho da fila
return fim;
}
} // fim Classe Fila
/////////////////////////////////////////////////////////////
class FilaApp {
public static void main(String[] args) {
Fila f = new Fila(4);
// O usuário deve verificar se a fila esta cheia antes
// de adicionar itens
if (!f.full()) f.push(20);
else System.out.println("ATENCAO FILA CHEIA");
if (!f.full()) f.push(40);
else System.out.println("ATENCAO FILA CHEIA");
// Continua ...21
22. // Continuação ...
if (!f.full()) f.push(60);
else System.out.println("ATENCAO FILA CHEIA");
if (!f.full()) f.push(80);
else System.out.println("ATENCAO FILA CHEIA");
if (!f.full()) f.push(10);
else System.out.println("ATENCAO FILA CHEIA");
while (!f.empty()) {// Ate esvaziar (se não vazio)
System.out.print(" " + f.front()); // Mostre na tela o
// valor do inicio
f.pop(); // Retira um item da fila
}
System.out.println("n");
} // fim programa principal
} // fim classe principal FilaApp 22
23. Atividades
Exercício 1: Dada uma fila contendo os valores 3, 9,
5 e 1 (nesta ordem), descreva o conteúdo dos itens
da fila após as operações:
push(2), pop, pop, pop, push(7), pop, pop,
push(4), pop, pop, push(8), push(6), pop.
Exercício 2: Construa um programa que leia n
caracteres digitados pelo usuário, até que o mesmo
pressione a tecla “enter”, e os atribua a uma fila de
caracteres conforme forem letras maiúsculas e
minúsculas, fila 1 e fila 2, respectivamente. No final
retire o conteúdo de cada fila mostrando-os na tela.
23