スタック

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

スタックは、ラストイン・ファーストアアウト (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} 10
print(s:Pop()) -- :{1} 5
s:Push(20) -- :{1、20}
print(s:Pop()) -- ある{1} 20
print(s:Pop()) -- {} 1

以前のコードサンプルを実行して何も変更しない場合、期待される出力は次のとおりです:

出力の例

10
5
20
1