フリーキーズ | 独学プログラミング

スタック(stack)とは

最終更新日

スタック(stack)とは、コンピュータサイエンスや情報科学において、データを特定の方法で保存・整理するために用いられるデータ構造です。スタックは、LIFO(Last-In, First-Out)の原則に従っており、スタックに追加された最後のアイテムが、最初に削除されるアイテムであることを意味しています。スタックは、2つの主要な操作を持つアイテムのコレクションと考えることができます: 「プッシュ」(スタックの一番上にアイテムを追加する)と「ポップ」(スタックから一番上のアイテムを削除する)です。スタックは、関数呼び出しの管理、式の解析、アプリケーションのアンドゥ/リドゥ履歴の維持など、さまざまなアルゴリズムやプログラミング作業で使用されています。

皿を用いた例

スタックを理解するために、例えを用いて説明しましょう。お皿のスタックがあり、スタックの一番上からしかお皿を追加・削除できないと想像してください。お皿を追加するときは、既存のお皿の上に置くことになります。お皿を取り除くときは、スタックの一番上からお皿を取り出します。これは、コンピュータサイエンスにおけるスタックの仕組みと非常に似ています。

プッシュとポップの操作例

以下は、プッシュとポップの操作を連続して行うスタックの例です。

  1. まず、空のスタックから始めます: []
  2. 値5をスタックに押し込む: [5]
  3. 値8をスタックに押し込む: [5, 8]
  4. 値3をスタックに押し込む: [5, 8, 3]
  5. スタックから一番上の値(3)をポップする: [5, 8]
  6. 値2をスタックに押し込む: [5, 8, 2]
  7. スタックから一番上の値(2)をポップする: [5, 8]

この例では、スタックは空から始まり、一連のプッシュとポップ操作を行います。各操作の後、スタックの一番上のアイテムは、まだ削除されていない一番最近追加されたアイテムです。

プログラミング言語やライブラリの中には、スタックデータ構造のサポートを内蔵しているものがあります。また、配列やリストを使ってスタックを実装することもできますが、その場合は、一方の端(スタックの「トップ」)からしかアイテムを追加したり削除したりできないという制約があります。

まとめ

要約すると、スタックは、LIFO(Last-In, First-Out)の原則に従ってデータを保存し、整理するために使用されるデータ構造である。スタックの先頭から項目を追加したり(プッシュ操作)、項目を削除したり(ポップ操作)できる。スタックは、関数呼び出しの管理、式の解析、アプリケーションのアンドゥ/リドゥ履歴の維持など、さまざまなアルゴリズムやプログラミング作業で使用されています。