スタックとは?すたっく
スタックとは、最後に入れたデータを最初に取り出す後入れ先出し(LIFO)のデータ構造。push(積む)とpop(取り出す)で操作し、現在位置はスタックポインタが指す。関数呼出し時の戻り番地や局所変数の退避・復元に使われ、割込み処理からの復帰も同じ仕組みで成り立つ。
最終更新:2026-10-07
この語が出る過去問を解く →背景
手続きが別の手続きを呼び、その先でまた呼ぶという入れ子の実行では、戻り先を「最後に呼んだものから順に」たどる必要がある。この順序はLIFOそのものなので、退避場所をスタックにすると戻り番地の管理が自動的に正しくなる。再帰やマルチタスクの文脈切替えがハードウェア支援で成立するのはこのためで、専門が非開発系の受験者にも午前I(科目A-1)では必ず当たる範囲になる。
具体例
再帰呼出しでは、呼び出すたびに現在の状態をスタックへ積み、戻るときに逆順で復元する。逆ポーランド表記の「3 4 + 5 ×」は、数値を積み、演算子で2つ取り出して結果を積み直す手順で評価できる。
試験での引っ掛け
先入れ先出しのキューと向きが逆。n個の要素をスタック経由で出力するときに作れる順序の総数はカタラン数であり、単純にn!ではない。局所変数の領域を超えて書き込むと戻り番地を壊すのがバッファオーバーフローで、スタック構造そのものはセキュリティ機構ではない。
関連用語
出た過去問
問題文で直接問われたものと、解説の中で触れられたものが含まれます。
出典:平成30年度 春期 高度試験 午前Ⅰ 問3(IPA)
再帰的な処理を実現するためには、再帰的に呼び出したときのレジスタ及びメモリの内容を保存しておく必要がある。そのための記憶管理方式はどれか。
正解:LIFO
要点:再帰呼出しの退避・復元はLIFO(スタック)で行う
再帰呼出しでは、呼び出しのたびに戻り番地やレジスタの内容、局所変数を退避し、復帰時には最後に退避したものから順に取り出す必要がある。この「後入れ先出し」の順序で管理する方式がLIFO(スタック)であり、実際にプログラムの実行時にはスタック領域が用いられる。
出典:令和3年度 春期 高度試験 午前Ⅰ 問2(IPA)
出典:令和7年度 春期 高度試験 午前Ⅰ 問3(IPA)
A, B, Cの順序で入力されるデータがある。各データについてスタックへの挿入と取出しを1回ずつ行うことができる場合、データの出力順序は何通りあるか。
正解:5
要点:スタック経由の出力順序数は要素数nのカタラン数(括弧の並べ方などを数える数列)
各データについて挿入と取出しを1回ずつ行える場合の出力順序の総数は、要素数nに対するカタラン数で求まる。n=3のときは5通りであり、具体的にはABC、ACB、BAC、BCA、CBAが実現できる。CABだけは作れない。Cを最初に出すにはAとBを積んだままにする必要があり、そのときBがAの上にあるため、スタックのLIFO性から次にAを出せない。
出典・参考
公式シラバスの1 基礎理論 > 1. データ構造 > (2) データ構造の種類に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。