アルゴリズムとプログラミング

基本情報技術者試験スタック・キュー」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:normal
同じ入力列 1, 2, 3, 4 を、(A) スタック(push 後にすべて pop)と (B) キュー(enqueue 後にすべて dequeue)でそれぞれ全要素を取り出す。次の手続を実行したとき、出力 outA(スタック)と outB(キュー)を連結した文字列の組はどれか。push/pop は LIFO、enqueue/dequeue は FIFO に従う。
○手続: run()
  // (A) スタック
  整数型: v
  for (v を 1 から 4 まで 1 ずつ増やす) stk.push(v) endfor
  while (stk が空でない) outA ← outA + stk.pop() endwhile
  // (B) キュー
  for (v を 1 から 4 まで 1 ずつ増やす) que.enqueue(v) endfor
  while (que が空でない) outB ← outB + que.dequeue() endwhile
outA="4321",outB="4321"
outA="1234", outB="4321"(逆に割当)
outA="1234", outB="1234"
outA="4321", outB="1234"
正解
outA="4321", outB="1234"

スタックは最後に積んだ 4 から取り出すため出力は 4321、キューは最初に入れた 1 から取り出すため出力は 1234 となる。両者の対比が正しく表れる エが正しい。

?選択肢ごとの解説

ア ×キューも逆順になると誤認した、FIFO が入力順を保つ性質を見落とした誤りである。
イ ×スタックとキューの出力を取り違え、LIFO と FIFO を逆に割り当てた誤りである。
ウ ×スタックも入力順になると誤認した、LIFO による逆転を見落とした誤りである。
エ ○スタックは最後に積んだ 4 から取り出すため出力は 4321、キューは最初に入れた 1 から取り出すため出力は 1234 となる。両者の対比が正しく表れる エが正しい。

くわしく

同一入力でもデータ構造により出力順が決まる。スタックは取り出し順が入力の逆、キューは入力と同じになる。この対比はデータ構造選択の基本判断基準となる。

本番での押さえどころ

試験のコツ

『スタック=逆順、キュー=そのまま』を即答できるようにし、具体列で 1 度確認する。

覚え方

『積むと逆さ(スタック)、並ぶとそのまま(キュー)』と対で覚える。

よくある誤り

スタックとキューの出力順を取り違える、または両者を同じと考えるミスが多い。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0108

【基本情報技術者試験】スタック・キューの問題 — 解答・解説|ukamiru 過去問