堆栈

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

堆是一种线性数据结构,包含遵循最后进最先出(LIFO)原则的一系列项目。堆的顶部是最近添加到堆的项目,堆的底部是最少最近添加的项目。

您可以将堆栈数据结构视为一堆晚餐盘:首先您使用一个,然后再放另一个在上面。当你从堆中拿出盘子时,堆中第一个你移除的盘子是最后一个你放在顶部的盘子。

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

实现堆栈

虽然 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

以下代码示例是作为 下的使用示例。您可以修改代验证码、类输入和存储位置,以满足自己的使用需求,只要您有以前的实现代码样本正确存储。

堆使用示例

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

在此页面