堆疊

*此內容是使用 AI(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

以下代碼示例是作為 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

此頁面