SlideShare uma empresa Scribd logo
1 de 23
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

Mais conteúdo relacionado

Mais procurados (18)

Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHAS
 
Aula 8
Aula 8Aula 8
Aula 8
 
Pilha
PilhaPilha
Pilha
 
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Haskell
HaskellHaskell
Haskell
 
Pilhas java
Pilhas javaPilhas java
Pilhas java
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - ETipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Teclas de Atalho
Teclas de AtalhoTeclas de Atalho
Teclas de Atalho
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
 

Semelhante a Estrutura de Dados Fila

Semelhante a Estrutura de Dados Fila (9)

Aula 11
Aula 11Aula 11
Aula 11
 
Texto aedii_modii_unid23_python
 Texto aedii_modii_unid23_python Texto aedii_modii_unid23_python
Texto aedii_modii_unid23_python
 
Slides pilhas e_filas
Slides  pilhas e_filasSlides  pilhas e_filas
Slides pilhas e_filas
 
7 alocacao sequencial - filas
7   alocacao sequencial - filas7   alocacao sequencial - filas
7 alocacao sequencial - filas
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.ppt
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Tecnologia em análise e Desenvolvimento de sistemas-fila.pdf
Tecnologia em análise e Desenvolvimento de sistemas-fila.pdfTecnologia em análise e Desenvolvimento de sistemas-fila.pdf
Tecnologia em análise e Desenvolvimento de sistemas-fila.pdf
 
Aula 15
Aula 15Aula 15
Aula 15
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 

Mais de Divani Barbosa (18)

Banco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface GraficaBanco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface Grafica
 
Aula 22
Aula 22Aula 22
Aula 22
 
Aula 21
Aula 21Aula 21
Aula 21
 
Aula 20
Aula 20Aula 20
Aula 20
 
Aula 19
Aula 19Aula 19
Aula 19
 
Aula 18
Aula 18Aula 18
Aula 18
 
Aula 17
Aula 17Aula 17
Aula 17
 
Aula 16
Aula 16Aula 16
Aula 16
 
Aula14
Aula14Aula14
Aula14
 
Aula 13
Aula 13Aula 13
Aula 13
 
Aula 12
Aula 12Aula 12
Aula 12
 
Aula 7
Aula 7 Aula 7
Aula 7
 
Aula 6
Aula 6Aula 6
Aula 6
 
Aula 5
Aula 5 Aula 5
Aula 5
 
Aula 4
Aula 4 Aula 4
Aula 4
 
Aula 3
Aula 3Aula 3
Aula 3
 
Aula 2
Aula 2Aula 2
Aula 2
 
Aula 1
Aula 1Aula 1
Aula 1
 

Estrutura de Dados Fila

  • 1. Estrutura de Dados FILAS Profa. Divani Barbosa Gavinier Aula 7 – parte 1 1
  • 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
  • 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): 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