スタックとは?すたっく
スタックとは、最後に入れたデータを最初に取り出す後入先出(LIFO)のデータ構造。データを積む操作をプッシュ、取り出す操作をポップという。関数を呼び出したときの戻り先アドレスの保存、式の計算、再帰処理(関数が自分自身を呼び出す処理)の実現などに使われる。
最終更新:2026-10-09
この語が出る過去問を解く →背景
処理の途中で別の処理へ飛ぶとき、戻り先を1つの変数に覚えると、飛んだ先からさらに飛んだ瞬間に上書きされてしまう。積み上げて最後の1つから取り出す形にすれば、何段深く飛んでも順番どおりに戻れる。基本情報の科目Bでは、操作の列をたどって最終状態や取り出される順を答える問題が定番になっている。
具体例
空のスタックに push 1, push 2, pop, push 3, pop, pop と操作すると、取り出される順は2、3、1になる。Java や Python の実行環境も、関数呼び出しのたびにこの仕組みで戻り先を積む。
試験での引っ掛け
先に入れたものから出るキュー(FIFO)との取り違えが最頻出。空の状態でポップするとアンダフロー、容量を超えてプッシュするとオーバフローになる。プッシュとポップが交互に混ざる操作列は、途中経過を1つずつ書き出さないと順序を誤る。
関連用語
出た過去問
問題文で直接問われたものと、解説の中で触れられたものが含まれます。
出典:平成29年度 秋期 基本情報技術者試験 午前 問5(IPA)
A, B, C, Dの順に到着するデータに対して、一つのスタックだけを用いて出力可能なデータ列はどれか。
正解:C, B, D, A
要点:スタックは後入れ先出し。上に残った要素を飛び越して出せない
スタックは後入れ先出しなので、到着順に押し込みつつ任意のタイミングで取り出せるが、一度下に埋まった要素より先に上の要素を出さねばならない。C,B,D,Aは A,B,Cを積んでC,Bを取り出し、次にDを積んで取り出し、最後にAを取り出す手順で実現できる。他の3つは、まだスタックに残っている上位要素を飛び越して下位要素を出す必要が生じるため不可能である。
出典:平成30年度 春期 基本情報技術者試験 午前 問5(IPA)
次の二つのスタック操作を定義する。PUSH n:スタックにデータ(整数値n)をプッシュする。POP:スタックからデータをポップする。空のスタックに対して、次の順…
正解:上から 3, 7, 1
要点:スタックは後入れ先出し。POPは直前にPUSHした値を取り除く
スタックは後入れ先出しなので、POPは常に直前にPUSHした値を取り除く。順に追うと、1と5を積んでPOPで5が消え残りは1。7,6,4を積んで下から1,7,6,4となり、POPで4、続くPOPで6が消えて1,7が残る。最後に3を積むので、上から順に3,7,1となる。
出典:令和元年度 秋期 基本情報技術者試験 午前 問8(IPA)
A, C, K, S, Tの順に文字が入力される。スタックを利用して、S, T, A, C, Kという順に文字を出力するために、最小限必要となるスタックは何個か…
正解:3
要点:同じ順序で出したい文字数だけスタックが要る(LIFOは逆順のみ)
スタックは後入れ先出しなので、同じスタックに積んだ複数の文字は積んだ順と逆順にしか出せない。出力の後半で A、C、K をこの順に出す必要があるが、この3文字は入力順も A、C、K なので、1つのスタックに積むと取り出しは K、C、A と逆になってしまう。よって A、C、K は別々のスタックに保持しておく必要があり、最低3個が要る。S と T は入力直後にそのまま出力できるので追加のスタックは不要である。
出典:平成31年度 春期 基本情報技術者試験 午前 問6(IPA)
三つのスタックA, B, Cのいずれの初期状態も[1, 2, 3]であるとき、再帰的に定義された関数f()を呼び出して終了した後のBの状態はどれか。ここで、スタ…
正解:[1, 2, 3, 1, 2, 3]
要点:スタックを2回経由すると順序は元に戻る
この関数はAから取り出した値を一度Cに積み、再帰から戻る際にCから取り出してBへ移す。Aはスタックなので取り出す順は3,2,1で、Cには3,2,1の順に積まれる。再帰の最も深い所から戻りながらCをpopすると1,2,3の順に出てくるため、Bには元の[1,2,3]の上に1,2,3が積まれる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。