スタックは、ラストイン・ファーストアアウト (LIFO) 原則に従って、アイテムのコレクションを持つライニングデータ構造です。スタックのトップは、最近スタックに追加されたアイテムで、スタックのボトムは最近追加されていないアイテムです。
スタックデータ構造をダイナープレートのスタックとして考えることができます:あなたは 1 から始まり、その上に別のプレートを置きます。スタックから取得するプレートは、最初 のプレートを削除すると、最後 のプレートを置きます。
スタックには 2つのメインオペレーションがあります:押す は、スタックのトップに要素を追加するために、スタックのサイズを変更します。ポップ は、スタックのトップから要素を削除するために、スタックのサイズを変更します。スタックは、バックトラックアルゴリズムなどのデザイン用途に便利で
スタックの実装
Luau にはスタックを内蔵データ構造としてはありませんが、テーブプッシュ を使用してスタックを実装できます。次のコードサンプルでは、スタックを作成する方法、 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
次のコードサンプルは、Script の下で、Workspace の使用例です。コード、タイプ、およびストレージ入力所を変更して、自分の使用に合わせてカスタマイズできます。前の実装コードサンプルを適切に保存している限り、Class.Workspace の使用例を変更することができます。
スタック使用例
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} 10print(s:Pop()) -- :{1} 5s:Push(20) -- :{1、20}print(s:Pop()) -- ある{1} 20print(s:Pop()) -- {} 1
以前のコードサンプルを実行して何も変更しない場合、期待される出力は次のとおりです:
出力の例
105201