Conteúdo sobre Front-end por Matheus Pergoli.

Blog.

Como implementar de forma simples uma Pilha em JS

Author image

Matheus Pergoli

Cover image

Estrutura de dados de Pilha

Uma pilha é uma coleção ordenada de items que obedece ao princípio LIFO

LIFO = (Last In First Out) que significa: O último a entrar é o primeiro a sair

A adição de novos itens ou a remoção de itens existentes ocorrem na mesma extremidade

O Final da Pilha é conhecido como o Topo, e o lado oposto é conhecido como a base

Os elementos mais novos ficam próximos ao topo, e os elementos antigos próximos da base

Criando uma classe Stack baseada em Array

class Stack {
  constructor() {
    this.items = []
  }
}

Como a Pilha obedece o princípio LIFO (Last In First Out), limitaremos as funcionalidades que estarão disponíveis à inserção e remoção de elementos

Os métodos a seguir estarão disponíveis na classe Stack

  • push(element(s)): esse método adiciona um novo elemento (ou vários elementos) no topo da pilha

  • pop(): esse método remove o elemento que está no topo da pilha e também devolve o elemento removido

  • peek(): esse método devolve o elemento que está no topo da pilha. A pilha não é modificada (O elemento não é removido; ele é devolvido apenas como informação)

  • isEmpty(): esse método devolve true se a pilha não contiver nenhum elemento e false se o tamanho da pilha for menor que 0

  • clear(): esse método removetodosos elementos da pilha

  • size(): esse método devolve o número de elementos contidos na pilha. É semelhante à propriedade length de um array

Push de elementos na Pilha

O primeiro método que vamos implementar é o método push, responsável pela adição de novos elementos na pilha, e com um detalhe muito importante: só podemos adicionar novos itens no topo da pilha, isso significa, no final dela

O método push é representado assim:

push(element) {
  this.items.push(element)
}

Como estamos usando um array para armazenar os elementos da pilha, podemos usar o método push de Array do Javascript

Pop de elementos da Pilha

Agora vamos implementar o método pop, responsável pela remoção de itens da pilha. Como a pilha utiliza o princípio LIFO (Last In First Out), o último item adicionado é aquele que será removido. Por esse motivo vamos utilizar o método pop de Array do Javascript

O método pop é representado assim:

pop() {
  return this.items.pop()
}

Como estamos utilizando apenas os métodos push e pop para adição e remoção de itens da pilha, o princípio LIFO (Last In First Out) se aplicará à nossa classe Stack

Verificando o elemento que está no topo da Pilha

Vamos implementar agora alguns métodos auxiliares adicionais em nossa classe

Se quisermos saber qual foi o último elemento adicionado em nossa pilha, podemos usar o método peek. Esse método devolverá o item que está no topo da pilha

O método peek é representado assim:

peek() {
  return this.items[this.items.length - 1]
}

Como estamos usando internamente um array Javascript para armazenar os itens, o último item de um array pode ser obtido usando length - 1

Verificando se a Pilha está vazia

Os próximos métodos que criaremos é isEmpty e size

isEmpty devolverá true se a pilha estiver vazia (nenhum elemento foi adicionado), e false caso contrário

O método isEmpty é representado assim:

isEmpty() {
  return this.items.length === 0
}

Ao usar o método isEmpty, podemos simplesmente verificar se o tamanho do array interno é 0

De modo semelhante à propriedade length de um array Javascript, também podemos implementar length em nossa classe Stack. Para coleções, em geral é usado o termo size no lugar de length

novamente, como estamos usando um array Javascript internamente, basta devolver o valor de length

O método size é representado assim:

size() {
  return this.items.length
}

Limpando todos os elementos da Pilha

Por fim, vamos implementar o método clear, o qual simplesmente esvazia a pilha, removendo todos os seus elementos

O método clear é representado assim:

clear() {
  this.items = []
}

E uma alternativa seria chamar o método pop até que a pilha esteja vazia

Pronto! sua classe Stack está implementada :)

Mais Artigos

Post image

Core Javascript Principles

Aprenda sobre os princípios mais importantes do Javascript

Author image

Matheus Pergoli

Post image

Aprenda a criar uma Árvore Binária de Busca com Javascript

Aprenda como criar uma estrutura de dados de Árvore com Javascript

Author image

Matheus Pergoli