堆栈

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

堆栈是线性数据结构,具有遵循后进先出(LIFO)原则的项集合。堆栈的顶部是最近添加到堆栈的项,而堆栈的底部是最久未添加的项。

你可以把堆栈数据结构想象成一叠餐盘:你从一个开始,然后把另一个放在上面。当你从堆栈中取盘子时,你从堆栈中移除的第一个盘子是最后一个放在顶部的盘子。

堆栈主要有两个操作:push用于将元素添加到堆栈顶部,pop用于从堆栈顶部移除元素。堆栈可以有固定大小,也可以动态调整大小。堆栈在设计使用中非常有帮助,如回溯算法。

实现堆栈

虽然 Luau 并没有将堆栈作为内置数据结构,但你可以使用 来实现堆栈。以下代码示例展示了如何创建一个堆栈,push 一个对象到堆栈,以及从堆栈中 pop 一个对象。为了在你的游戏中使用这个实现,你应该将其保存为 ModuleScript 并存储在 ReplicatedStorage 中,以便可以在客户端和服务器上访问你的堆栈。


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) -- {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

如果你在未更改任何内容的情况下运行上述代码示例,预期输出是:

示例输出

10
5
20
1
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。