スタック

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

スタックは、最後に入って最初に出る (LIFO) 原則に従うアイテムのコレクションを持つ線形データ構造です。スタックの上部は最も最近追加されたアイテムであり、スタックの下部は最も最近追加されたアイテムです。

スタックデータ構造を夕食の皿のスタックと考えることができます:最初は 1 つを開始し、その上に別のものを置きます。スタックからプレートを取り出すと、スタックから削除する最初の 1 は、トップに置く最後の 1 です。

スタックには 2つのメイン操作があります: 押す でスタックの頂上に要素を追加し、 押す で要素をスタックの頂上から削除します。スタックには固定サイズがあるか、動的にサイズが変更されることがあります。スタックは、バックトラックアルゴリズムなどのデザイン使用に便利です。

スタックを実装

Luau には内蔵データ構造としてスタックがありませんが、テーブル を使用してスタックを実装できます。次のコードサンプルでは、スタックを作成する方法、 オブジェクトをスタックに配置する方法、およびスタックからオブジェクトを取得する方法を示しています。この実装をエクスペリエンスに使用するには、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

ページ内容