Pilhas

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Uma pilha é uma estrutura de dados linear com uma coleção de itens que seguem o princípio Last-In-First-Out (LIFO). A parte superior da pilha é o item mais recentemente adicionado à pilha, e a parte inferior da pilha é o item que foi adicionado menos recentemente.

Você pode pensar na estrutura de dados da pilha como uma pilha de pratos de jantar: você começa com um, e depois você coloca outro acima dele. Quando você tira os pratos da pilha, o primeiro prato que você remove da pilha é o último prato que você coloca na parte superior.

Stacks têm duas operações principais: empurrar para adicionar um elemento ao topo do stack e pop para remover o elemento do topo do stack. Um Stack pode ter um tamanho fixo ou ser reposicionado dinamicamente. Stacks são úteis para uso de design, como algoritmos de rastreamento.

implementando Stacks

Embora o Luau não tenha tabelas como uma estrutura de dados incorporada, você pode usar tabelas para implementar tabelas. O seguinte código de exemplo mostra como criar uma tabela, push um objeto para uma tabela e pop</


local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- Verifique se a pilha está vazia
function Stack:IsEmpty()
return #self._stack == 0
end
-- Coloque um novo valor na pilha
function Stack:Push(value)
table.insert(self._stack, value)
end
-- Pegue um valor da pilha
function Stack:Pop()
if self:IsEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack

O seguinte código de exemplo é um exemplo de uso como um Script sob Workspace. Você pode modificar o código, digitare local de armazenamento para se ajustar à sua própria experiência, desde que você tenha o código de implementação anterior armazenado corretamente.

Exemplo de Uso em Pilha

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Stack = require(ReplicatedStorage:WaitForChild("Stack"))
local s = Stack.new()
-- Altere o stack resultante do stack de saída
s:Push(1) --
s:Push(5) -- :{1, 5}
s:Push(10) -- :{1, 5, 10}
print(s:Pop()) -- :{1, 5} 10
print(s:Pop()) -- :{1} 5
s:Push(20) -- :{1, 20}
print(s:Pop()) -- {1} 20
print(s:Pop()) -- {} 1

Se você executar o exemplo de código anterior sem alterar nada, a saída esperada é:

Saída de Exemplo

10
5
20
1