基本情報技術者試験 - 令和5年7月修了 - 問5

空の状態のキューとスタックの二つのデータ構造がある。次の手続を順に実行した場合,変数xに代入されるデータはどれか。ここで,手続で引用している関数は,次のとおりとする。

〔関数の定義〕
 push(y):データyをスタックに積む。
 pop():データをスタックから取り出して,その値を返す。
 enq(y):データyをキューに挿入する。
 deq():データをキューから取り出して,その値を返す。

〔手続〕
 push(a)
 push(b)
 eng(pop())
 enq(c)
 push(d)
 push(deq())
 x ← pop()
アa
イb
ウc
エd
答え : イ
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › データ構造
同一問題 : 〔令4修7問7〕〔令3修1問7〕〔平29修6問5〕〔平26春問7〕〔平22修1問5〕
解説 :
「キュー」と「スタック」という2つのデータ構造を組み合わせて操作する手続きを,順番に実行していくとどうなるかを追跡する問題です。スタックは「LIFO」(後入れ先出し),キューは「FIFO」(先入れ先出し)の性質を持ちます。

手続きを順番に見ていくと,まず push(a) でスタックにaが積まれ,次に push(b) でスタックにbが積まれるので,スタックの中は下からa,bという状態です。次の enq(pop()) では,まず pop() が実行されてスタックからbが取り出され,そのbがキューに挿入されます。この時点で,スタックの中にはaだけが残っており,キューの中にはbが入っています。

次に enq(c) で,キューにcが挿入されるので,キューの中はb,cという順番になります。次に push(d) で,スタックにdが積まれるので,スタックの中はa,dという状態です。次の push(deq()) では,まず deq() が実行されてキューから先頭のb(先に入れたもの)が取り出され,そのbがスタックに積まれます。この時点で,スタックの中はa,d,bという状態です。

最後に x←pop() で,スタックから最後に積まれたbが取り出され,xに代入されます。従って,xにはbが代入され,正解は「イ」です。この問題は,キューとスタックのそれぞれの取り出し方の違いを正確に理解し,手続きを一つずつ丁寧に追跡することがポイントになります。
ホーム画面への追加方法
1.ブラウザの 共有ボタンのアイコン 共有ボタンをタップ
2.メニューの「ホーム画面に追加」をタップ
閉じる