堆叠

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

堆叠是一个线性数据结构,其中以下项目是按“最后在最初”(LIFO)原则添加到堆叠的。顶部的堆叠是最后添加到堆叠的项目,底部的堆叠是最不давно添加到堆叠的项目。

您可以将堆叠数据结构想象为一个叠卧的餐盘:你从一个开始,然后你将另一个放在它上面。当你从堆叠数据结构中移除一枚时,最先 移除 的是最后 放 在最上面的一枚。

堆有两个主要操作: 用于将元素添加到堆的顶部, 用于从堆的顶部移除元素。堆可以有固定大小或动态调整大小。堆有助于设计用途,例如返回跟踪算法。

实现堆叠

虽然 Luau 不是一个内置数据结构,但您可以使用 来实现堆。以下代码示例显示如何创建堆, push 一个对象到堆,和 pop 一个对象从堆。要使用此实现


local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- 检查堆是否为空
function Stack:IsEmpty()
return #self._stack == 0
end
-- 将新值放入堆
function Stack:Push(value)
table.insert(self._stack, value)
end
-- 从堆上取值
function Stack:Pop()
if self:IsEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack

下面的代码示例是一个使用示例,作为 ScriptWorkspace 下。您可以修改代验证码、输入和存储位置来满足您自己的使用方式,只要您有正确存储位置的前一份实现代码示例。

堆叠使用例子

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Stack = require(ReplicatedStorage:WaitForChild("Stack"))
local s = Stack.new()
-- 更改堆叠结果堆叠结果输出
s:Push(1) --
s:Push(5) -- ,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}版
print(s:Pop()) -- {} 1

如果您运行以前的代码示例,无需更改任何内容,预期输出是:

示例输出

10
5
20
1