Uma pilha é uma estrutura de dados lineares com uma coleção de itens que segue o princípio Last-In-First-Out (LIFO).O topo da pilha é o item mais recentemente adicionado à pilha e a parte inferior da pilha é o item que foi menos recentemente adicionado.
Você pode pensar na estrutura de dados da pilha como uma pilha de pratos de janta: você começa com um e, em seguida, coloca outro acima dela.Quando você tira as placas da pilha, a primeira placa que você remove da pilha é a última placa que você coloca no topo.
Pilhas têm duas operações principais: empurrar para adicionar um elemento ao topo da pilha e pop para remover o elemento do topo da pilha.Uma pilha pode ter um tamanho fixo ou ser redimensionada dinamicamente.Pilhas são úteis para o uso de design, como algoritmos de rastreamento de volta.
Implementar pilhas
Embora Luau não tenha pilhas como uma estrutura de dados integrada, você pode usar tabelas para implementar pilhas.O seguinte exemplo de código mostra como criar uma pilha, push uma objetos para uma pilha e pop um objeto da pilha.Para usar essa implementação para sua experiência, você deve salvá-la como um ModuleScript e armazená-la em ReplicatedStorage, para que sua pilha seja acessível tanto para o cliente quanto para o servidor.
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
-- Tire 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 exemplo de código é um exemplo de uso como um Script sob Workspace .Você pode modificar o código, o digitare a localização de armazenamento para se encaixar no seu próprio uso, desde que você tenha o código de amostra de implementação anterior armazenado corretamente.
Exemplo de Uso de Pilha
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Mude o resultado da pilha alterando a pilha resultante Outputs:push(1) -- {1}s:push(5) -- {1, 5}s:push(10) -- {1, 5, 10}print(s:pop()) -- {1, 5} 10print(s:pop()) -- {1} 5s:push(20) -- {1, 20}print(s:pop()) -- {1} 20print(s:pop()) -- {} 1
Se você executar o exemplo de código anterior sem alterar nada, o resultado esperado é:
Saída de Exemplo
105201