46 lines
2.6 KiB
Markdown
46 lines
2.6 KiB
Markdown
|
---
|
||
|
title: Queues
|
||
|
localeTitle: caudas
|
||
|
---
|
||
|
## Filas
|
||
|
|
||
|
Fila é uma Estrutura de Dados First In First Out (FIFO). Muitos algoritmos usam filas em seu núcleo para melhorar o desempenho.
|
||
|
|
||
|
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)
|
||
|
2. Fila Circular
|
||
|
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,
|
||
|
|
||
|
1. Adicionar / Oferecer - insere um elemento no final da fila.
|
||
|
2. Remover / Pesquisar - Remove um elemento do começo da fila.
|
||
|
3. Peek - Retorna o elemento no início da fila, mas não o remove.
|
||
|
4. Tamanho / Contagem - Retorna o número de elementos atualmente presentes na fila.
|
||
|
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.
|
||
|
|
||
|
\`\` \`JavaScript
|
||
|
var Queue = function () { var queue = \[\]; var front = 0; var back = 0; Retorna { isEmpty: function () { retornar frente> = voltar || queue.length === 0; } add: function (elem) { / \* Você também pode fazer queue.push (elem) em JavaScript. É assim que eles fazem em outros idiomas \* / fila \[voltar ++\] = elem; } remove: function () { if (! this.isEmpty ()) { fila de retorno \[frente ++\]; // ou queue.shift () } outro { throw new Error ("Fila está vazia"). } } espiada: function () { if (! this.isEmpty ()) { fila de retorno \[frente\]; } } } };
|
||
|
|
||
|
var queue = new Fila (); console.log (queue.isEmpty ()); // verdade queue.add (1); fila.add (2); console.log (queue.remove ()); // 1 console.log (queue.peek ()); // 2 console.log (queue.remove ()); // 2 console.log (queue.remove ()); // exception \`\` \`
|
||
|
|
||
|
#### 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)
|
||
|
* [Vídeo do HackerRank Stacks and Queues](https://www.youtube.com/watch?v=wjI1WNcIntg)
|