
スタックを知ろう!
データ構造のスタックについて解説します。スタックはプログラミングを学ぶ上で非常に重要な概念です。
スタックとは?
スタックはデータを一時的に保存するための「箱」のようなものです。特に重要な特徴は以下の2点です:
後入れ先出し(LIFO: Last In, First Out)
最後に入れたデータが最初に取り出されます。操作が限られている
スタックでは以下の操作しかできません:データを追加する(プッシュ: push)
データを取り出す(ポップ: pop)
一番上のデータを見る(ピーク: peek または top)
スタックのイメージ
以下の図を見てみましょう:
操作例:
1. 空のスタックにデータを追加
2. データを取り出す
状態の変化:
スタック: [ ] (空の状態)
push(1) => [1]
push(2) => [1, 2]
push(3) => [1, 2, 3]
pop() => [1, 2] (3を取り出す)
peek() => [1, 2] (2を見るだけ、スタックは変化しない)
世の中にあるスタック
日常生活の中には、スタック(後入れ先出し、LIFO)の概念が自然と溶け込んでいる場面がたくさんあります。以下にその例をいくつか挙げてみます。
本やノートの積み重ね
机の上で本やノートを積み重ねた場合、一番上に置いたものを最初に手に取ることになります。これもスタックの典型的な使い方です。
ブラウザの「戻る」ボタン
ウェブブラウザでページを閲覧しているとき、ページの履歴がスタックとして管理されています。新しいページを開くとスタックに「push」され、戻るボタンを押すとスタックから「pop」されて前のページに戻ります。
ビデオゲームの「ポーズメニュー」
ゲーム内でポーズをすると、現在の画面の状態が保存され、ポーズメニューが表示されます。この仕組みは、ゲームの画面状態をスタックとして管理することで実現されています。
まとめ
スタックはシンプルながらも非常に強力なデータ構造です。
特に「後入れ先出し(LIFO)」の動作を活かした問題解決が得意です。
まずは、基本的な操作を試して慣れるところから始めましょう。