スタックとは?すたっく
スタックとは、最後に入れたものを最初に取り出す、後入れ先出しのデータ構造。積むpushと取り出すpopの2操作だけで扱い、途中の要素には触れない。手続の呼出しで戻り番地と局所変数を退避・復元する仕組みが、この構造そのもので実装されている。
最終更新:2026-10-06
この語が出る過去問を解く →背景
手続が別の手続を呼び、その先がさらに呼ぶという入れ子は、必ず内側から順に終わる。終わる順番が呼んだ順の逆だと分かっているなら、記憶領域も同じ規則で使い回せばよく、確保と解放が加算・減算だけで済む。一般の動的確保が要らないのはこのためで、再帰の深さが読めないとこの領域が尽きる(スタックオーバーフロー)のも同じ性質の裏側になる。
具体例
逆ポーランド記法の式は、数値なら積み、演算子なら上から2つ取り出して結果を積む、という手順だけで評価できる。JVMもメソッド呼出しごとにフレームを積む方式で、例外時に表示される呼出し履歴はこの積み重なりを上から書き出したものである。
試験での引っ掛け
n個の要素をこの構造を通して出力するときに作れる順序の総数はカタラン数で、n!ではない(積む・取り出すの並びに制約が入るため)。先入れ先出しのキューとの取り違えも定番で、割込み処理やジョブの順番待ちに使うのはキューの側になる。
関連用語
出た過去問
出典:令和元年度 秋期 システムアーキテクト試験 午前Ⅱ 問5(IPA)
あるプログラム言語によるプログラミングの解説書の中に次の記述がある。この記述中の"良いプログラム"がもっている特性はどれか。 このプログラム言語では、関数を呼び…
正解:プログラムの一部(関数)を変更しても、他の関数への影響が少ない。
要点:引数渡しは結合度を下げ変更の影響を局所化する
引数として受け渡していたデータを、どこからでも参照できる共通域(グローバル変数)に移すと、関数間の結合度が高まる。ある関数の変更が共通域を使う他の関数へ波及しやすくなるため、メモリを節約できても保守性の面で望ましくない。したがって「良いプログラム」が持つ特性は、変更の影響が他へ及びにくいことである。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。