Estrutura de
Dados
FILAS
Profa. Divani Barbosa Gavinier
Aula 7 – parte 1
1
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
 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
Classe
int fim;
int tam_max;
long[] itens;
Campos
Exclusões e
Consultas
Início
posição
zero Final
Inserções
4
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
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
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
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
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
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
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
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
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
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
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
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;
}
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
Implementação Fila
18
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
// 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
// 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
// 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
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

Aula 9

  • 1.
    Estrutura de Dados FILAS Profa. DivaniBarbosa Gavinier Aula 7 – parte 1 1
  • 2.
    FILAS A maneira maisfá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 oprincí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
  • 4.
    Classe int fim; int tam_max; long[]itens; Campos Exclusões e Consultas Início posição zero Final Inserções 4
  • 5.
    Classe push (enqueue): Insereitens 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 Operacionaisfilas 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óximoitem 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 tamanhoda 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 afila 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 afila 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 cadapasso 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 passodo 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 passodo 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 passodo 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 NULOa 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
  • 18.
  • 19.
    class Fila { privatelong[] 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 voidpop() { // 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 ... publicint 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: Dadauma 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