DEV Community

Cover image for Estrutura de Dados: Filas
Cristian Magalhães
Cristian Magalhães

Posted on • Edited on

Estrutura de Dados: Filas

Eae gente bonita, beleza?

Hoje volto a falar sobre um tema muito importante dentro da estrutura de dados, dessa vez abordando o tema Filas. É um tema muito importante e que está presente no dia a dia do desenvolvedor e muitas vezes nem percebemos.

O que é uma fila?

Fila de pinguins

Uma fila é uma coleção de itens ordenada baseada no conceito de FIFO (First In First Out). Basicamente signfica que o primeiro a entrar na fila também é o primeiro a sair. Assim como acontece na fila do cinema, por exemplo. E os novos itens sempre são adicionados no final da fila.

Onde isso é aplicado?

A fila é uma estrutura de dados bem útil e usada de várias formas durante o desenvolvimento de software. Por exemplo:

  • Fila de e-mails: é muito comum sua aplicação gerar e-mails para serem enviados usando uma cloud. Porém esses e-mails não são enviados diretamente. Eles entram em uma fila para serem processados e enviados ao seu destino.

  • Processamento de pagamentos: Imagine se você compra algo na amazon e por algum motivo o seu pagamento não é processado? Para conseguir lidar com a quantidade de pagamentos e ter a certeza de que ele será processado é possível usar uma fila para controlar isso.

Na prática

Aqui vai um exemplo de implementação de uma fila e algumas formas de uso ⤵

class Queue { // Quantidade de items na fila. #count = 0; // Serve para controlar quando é o primeiro item da fila. Não necessáriamente pode ser 0. #lowestCount = 0; // Objeto com todos os items armazenados. #items = {}; // Adiciona os items na fila. enqueue(element) { this.#items[this.#count] = element; this.#count++; } // Verifica se a fila está vazia. isEmpty() { return (this.#count - this.#lowestCount) === 0; } // Remove o primeiro item da fila. dequeue() { if (this.isEmpty()) { return undefined; } const result = this.#items[this.#lowestCount]; delete this.#items[this.#lowestCount]; this.#lowestCount++; return result; } // Retorna o primeiro item da fila. peek() { if(this.isEmpty()) { return '' } return this.#items[this.#lowestCount]; } // Retorna o tamanho da fila. size() { return this.#count - this.#lowestCount; } // Limpa a fila. clear() { this.#items = {}; this.#count = 0; this.#lowestCount = 0; } // Retorna todos os items da fila em uma string. toString() { if (this.isEmpty()) { return ''; } let objString= `${this.#items[this.#lowestCount]}`; for (let index = this.#lowestCount + 1; index < this.#count; index++) { objString = `${objString}, ${this.#items[index]}`; } return objString; } } 
Enter fullscreen mode Exit fullscreen mode

Aqui é um exemplo de uso bem simples da nossa fila. Primeiro nós estanciamos a classe e em seguida começar a adicionar itens e manipular a fila da forma que precisarmos.

const queue = new Queue(); queue.enqueue("Cristian"); // Cristian queue.enqueue("Paulo"); // Cristian, Paulo console.log(queue.size()) // 2 queue.enqueue("Mateus"); // Cristian, Paulo, Mateus queue.dequeue(); console.log(queue.toString()) // Paulo, Mateus console.log(queue.peek()); // Paulo queue.clear(); console.log(queue.isEmpty()); // True 
Enter fullscreen mode Exit fullscreen mode

Serviços

Vimos que implementar e usar uma fila parece uma tarefa simples, porém usar uma fila em larga escala é uma tarefa bem complexa. Então é comum usar serviços para realizar essa tarefa, existem diversos serviços e formas de fazer como por exemplo o SQS da AWS.

Outros tipos de fila

Também existe um outro tipo de fila chamada de Deque ou fila de duas pontas. Ela permite que você faça operações de remoção e inserção nas duas pontas da fila.


Referências

Estruturas de Dados e Algoritmos com JavaScript by Loiane Groner

Se chegou até aqui, me segue la nas redes vizinhas.

Top comments (2)

Collapse
 
lexipedia_dev profile image
Alexsander Viana

Opa, eaí Cristian, bacana demais este conteúdo cara.
Estruturas de dados foi uma das matérias que mais gostei na faculdade e as filas são parte das estruturas mais básicas e mais importantes que temos. Gostei muito da maneira que você trouxe o conteúdo na sua postagem. 😄

Collapse
 
cristuker profile image
Cristian Magalhães

Valeu cara fico feliz que tenha curtido. Apesar de ter tido essa mesma matéria como muita coisa que a gente é pronta a gente acaba esquecendo de execitar uma coisa tão importante quanto essa. É sempre bom relembrar!