As pilhas e as filas em Javascript

Dezembro 2016


Os programadores conhecem bem as duas estruturas que são as pilhas e as filas , e que lhe permitem de ordenar elementos durante a espera de um tratamento. Nós veremos aqui que existe um meio simples de os reproduzir em Javascript com métodos pré-existentes.


O objeto Array


No centro de nossa atenção: os quadros, ou seja o Array de Javascript. A maioria de nós o conhece certamente, também o pedaço de código aqui abaixo não surpreenderá ninguém, e todo mundo compreenderá porque eu não ficarei mais tempo aqui.

ver meuQuadro = new Array(1, 2, 3, 4, 5) ;


Vela bem, as pilhas e os filas Javascript não são nada mais do que quadros que se utiliza em quatro métodos: pop(), push(), shift() e unshift().

As pilhas : a estrutura FILO


"O que quer dizer a estrutura FILO ?!" escutei você se perguntar FILO é um acrônimo inglês que significa"First In Last Out", quer dizer : "Primeiro a entrar, primeiro a sair"

Para lhe representar a coisa, imagem.....bom uma pilha, simplesmente. Se você empilhar alguns livros e que você a colocar no chão, então necessariamente o último colocado por cima será o primeiro que você pegará depois (salvo se você quiser derrubar todos os livros da pilha).


Em resumo, nós iremos utilizar os dois métodos abaixo:
  • push() : que permite adicionar um elemento no final do quadro, aumentando assim seu tamanho de 1.
  • pop() : que retirara o último elemento do quadro, reduzindo assim seu tamanho de 1..

Evidentemente, você pode igualmente utilizar os métodos shift() e unshift() para fazer uma pilha com o inicio do quadro, mas fica mais limpo "gramaticalmente" falando utilizar o fim.

Exemplo de utilização de uma pilha :
meu quadro.push(6);  //Adiciona-se um 6° elemento   
meu quadro.pop();   // Retira-se      
meu quadro.pop();   // Retira-se 5    meu quadro.push(meu quadro.pop()); // Sem efeito!      
/* O quadro resultante é [1|2|3|4] */

Os filas: a estrutura FIFO


Uma nova estrutura ! FIFO é o acrônimo significando "First In First Out", quer dizer : "Primeiro a entrar, primeiro a sair".

Imagine desta vez uma fila de espera em um supermercado. Você chegará na caixa em primeiro lugar, e as pessoas chegariam atrás de você. Necessariamente, você vai passar em primeiro : isto é uma fila :
Nós iremos aqui utilizar os dois métodos seguintes
  • push() : que permite sempre adicionar um elemento no final do quadro.
  • shift() : que retira o primeiro elemento do quadro, reduzindo assim seu tamanho ao defasar os outros elementos para a esquerda.

mais uma vez, você pode fazer uma fila invertida ao adicionar elementos no início, e os retirando pelo fim ; mas, melhor ainda é ficar o mais próximo possível da realidade!

Exemplo de utilização de uma fila :
 meu quadro.push(6);  // Adiciona-se um 6° elemento   
meu quadro.shift();   // retira-se o 1      
meu quadro.shift();   // retira-see 2      
meu quadro.push(meuQuadro.shift()); // Coloca-se o primeiro elemento no fim !   
/* O quadro que resulta é [4|5|6|3] */

Quando utilizá-los ?


A utilização das pilhas e das filas vai se impor à você. Se eu fiz esta dica, é justamente porque eu tive de fazer isso, pouco tempo atrás. Eu tive que gerar os acontecimentos onKeyUp de uma input de tipo texto, o objetivo foi o de substituir aquilo que o usuário digitava por outra coisa... e memorizar!

Mas, o usuário digitava muito rápido, os elementos onKeyUp se misturavam e seu recuperava na saída algo completamente falso. Eu criei então uma fila que me permitia estocar rapidamente, num crescendo, a totalidade das letras digitadas, que foram tratadas mais tarde. O problema estava resolvido.


Tradução feita por Ana Spadari

Veja também

Artigo original publicado por . Tradução feita por ninha25. Última modificação: 30 de novembro de 2011 às 05:35 por ninha25.
Este documento, intitulado 'As pilhas e as filas em Javascript', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.