Executando verificação de segurança...
1

Referência para entender Pilhas com JavaScript

E aí galera do TabNews, tudo bem com vocês? Meu nome é Edgar e sou estudante de Engenharia de Software e atualmente tenho como objetivo me especializar em JavaScript. Além deste objetivo, um dos meus desejos para 2024 é relatar de forma clara e simplificada algumas das coisas que venho aprendendo, através de publicações aqui mesmo no TabNews para discussão e aprendizagem, e em posts no LinkedIn e Medium. Eu agradeceria imensamente se após a leitura desta pequena publicação vocês me dessem o feedback de vocês, sobre o que acharam do texto. Esse é meu primeiro "pequeno artigo", agradeceria se lessem com carinho.

O que é a Estrutura de Dados Pilha?

A Estrutura de Dados Pilha (Stack) apresenta algumas semelhanças com os Arrays, porém, ela nos oferece mais controle sobre a adição e remoção dos elementos.

Uma pilha é uma coleção ordenada de itens que obedece ao princípio LIFO (Last In, First Out), em tradução livre, o último a entrar é o primeiro a sair. Ou seja, os elementos não podem ser adicionados ou removidos fora de ordem, o último elemento adicionado é sempre o primeiro a ser removido. Imagine uma pilha de livros, para compreender melhor.

Criando e Manipulando uma Pilha usando Arrays

Segue abaixo nossa classe construtora e os métodos disponíveis em uma pilha.

class Pilha {
  constructor() {
    this.itens = []
  }
}

Método push()

O método push() é responsável pela adição de um ou mais elementos no topo da pilha.

push(elemento) {
  this.itens.push(elemento)
}

Método pop()

O método pop() remove e devolve o elemento que está no topo da pilha.

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

Método peek()

O método peek() devolve como informação o elemento que está no topo da pilha.

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

Método isEmpty()

O método isEmpty() é responsável por retornar true se a pilha estiver vazia e false caso o tamanho da pilha seja maior que 0.

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

Método size()

O método size() devolve o número de elementos contidos na pilha.

size() {
  return this.itens.length
}

Método clear()

O método clear() é responsável pela remoção de todos os elementos da pilha.

clear() {
  this.itens = []
}

Exemplo Prático de uma Pilha em JavaScript usando Arrays

Conhecendo nossa classe construtora e os métodos disponíveis em uma Pilha (Stack), a classe Pilha foi construída da seguinte maneira:

class Pilha {
  constructor() {
    this.itens = []
  }

  push(elemento) {
    this.itens.push(elemento)
  }

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

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

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

  size() {
    return this.itens.length
  }

  clear() {
    this.itens = []
  }
}

Com o objetivo de exemplificar a utilização da classe Pilha, vamos criar uma instância desta classe:

const pilha = new Pilha()

Vamos trabalhar com a adição de números na pilha utilizando o método push():

pilha.push(1)
pilha.push(2)
pilha.push(3)

Perceba que o último elemento adicionado a pilha foi o número 3, e já sabemos que uma Pilha obedece ao princípio Last in, First Out. Logo, se utilizarmos agora o método pop() iremos remover e retornar o número 3:

console.log(pilha.pop()) // exibe 3

Então, se utilizarmos o método peek() com o objetivo de veriricar o último elemento da pilha, vamos obter o número 2 como resultado:

console.log(pilha.peek()) // exibe 2

Sabendo que há ao menos um elemento na pilha, se utilizarmos o método isEmpty() vamos receber como retorno false:

console.log(pilha.isEmpty()) // exibe false

Agora, vamos verificar o número de elementos na pilha utilizando o método size():

console.log(pilha.size()) // exibe 2

O último elemento a ser exemplificado é o clear(), vamos usar este método e verificar com o método isEmpty() se a pilha realmente está vazia:

pilha.clear()
console.log(pilha.isEmpty()) // exibe true

Carregando publicação patrocinada...
1

Legal para os próximos textos exemplificar as aplicações de cada estrutura de dado no mundo real.

Pilhas, por exemplo, são utilizadas nas pilhas de execução de diversas linguagens. E isso fica bem claro nas stacktraces das mensagens de erro no console. Se vc reparar, ali fica bem claro como o código está sendo executado como uma pilha.

Outra aplicação bem legal, também, é em games. Uma vez, para um trabalho da faculdade, tive que escrever um jogo de cartas. E a pilha era a estrutura que usavamos para representar a pilha de cartas.

Quem tiver mais exemplos, sinta-se livre para comentar.

1

Agradeço o seu comentário! Realmente é uma boa ideia exemplificar a aplicação da estrutura de dado. E os exemplos que você citou da utilização de Pilhas são muito bons, o jogo de cartas exemplifica tão bem! Vou tentar adicionar essas informações ao texto.