2018-10-12 20:35:31 +00:00
---
title: Queues
2018-11-08 10:10:29 +00:00
localeTitle: Filas
2018-10-12 20:35:31 +00:00
---
## Filas
2018-11-08 10:10:29 +00:00
Fila é uma Estrutura de Dados First In First Out (FIFO) em português o primeiro a entrar é o primeiro a sair. Muitos algoritmos usam filas em seu núcleo para melhorar o desempenho.
2018-10-12 20:35:31 +00:00
A fila é um dos tipos abstratos de dados abstratos (ADT). É semelhante a filas que temos em filmes ou supermercados. A primeira pessoa a chegar será servida primeiro, certo? Da mesma forma, o primeiro elemento a ser inserido será removido primeiro. Existem vários tipos de filas, como
1. Fila Simples (ou Fila)
2018-11-08 10:10:29 +00:00
2. Fila Circular (ou Simplismente encadeada)
2018-10-12 20:35:31 +00:00
3. Fila de prioridade
4. Dequeue (fila dupla terminada)
Se você puder entender a fila simples (que daqui em diante será chamada de 'Fila'), todas as outras serão igualmente fáceis, com poucas modificações.
As operações mais comuns disponíveis na fila são,
2018-11-08 10:10:29 +00:00
1. Add / Offer - insere um elemento no final da fila.
2. Remove / Poll - Remove um elemento do começo da fila.
2018-10-12 20:35:31 +00:00
3. Peek - Retorna o elemento no início da fila, mas não o remove.
2018-11-08 10:10:29 +00:00
4. Size / Count - Retorna o número de elementos atualmente presentes na fila.
2018-10-12 20:35:31 +00:00
5. IsEmpty - Verifique se a fila está vazia ou não.
A implementação de uma fila é possível usando arrays ou listas vinculadas. A seguir, uma implementação de matriz simples da estrutura de dados da fila com suas operações mais comuns.
2018-11-08 10:10:29 +00:00
```javascript
var Fila = function() {
var fila = [];
var inicio = 0;
var final = 0;
return {
isEmpty: function() {
return inicio >= final || fila.length === 0;
},
add: function(elem) {
/* Você também pode fazer fila.push(elem) em JavaScript.
Assim é como se fazem em outras linguagens */
fila[final++] = elem;
},
remove: function() {
if (!this.isEmpty()) {
return fila[inicio++]; // ou fila.shift()
}
else {
throw new Error("A fila está vazia.");
}
},
peek: function() {
if (!this.isEmpty()) {
return fila[inicio];
}
}
}
};
2018-10-12 20:35:31 +00:00
2018-11-08 10:10:29 +00:00
var fila = new Fila();
console.log(fila.isEmpty()); // Verdadeiro
fila.add(1);
fila.add(2);
console.log(fila.remove()); // 1
console.log(fila.peek()); // 2
console.log(fila.remove()); // 2
console.log(fila.remove()); // exception
```
2018-10-12 20:35:31 +00:00
#### Aplicações
* Simulação
* Agendamento (Job Scheduling, Disk Scheduling)
* Gestão Compartilhada de Recursos
* Buffer do Teclado
* Largura Primeira Pesquisa
* Para lidar com o congestionamento na rede
#### Mais Informações:
* [Mais informações sobre filas - GeeksForGeeks ](http://www.geeksforgeeks.org/queue-data-structure/ )
* [Resolva Desafios Usando Filas - Hackerrank ](https://www.hackerrank.com/domains/data-structures/queues )
2018-11-08 10:10:29 +00:00
* [Vídeo do HackerRank Stacks and Queues ](https://www.youtube.com/watch?v=wjI1WNcIntg )