基本情報技術者試験 - 令和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()
〔関数の定義〕
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 |
答え : イ
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › データ構造
解説 :
「キュー」と「スタック」という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が代入され,正解は「イ」です。この問題は,キューとスタックのそれぞれの取り出し方の違いを正確に理解し,手続きを一つずつ丁寧に追跡することがポイントになります。
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › データ構造
解説 :
「キュー」と「スタック」という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が代入され,正解は「イ」です。この問題は,キューとスタックのそれぞれの取り出し方の違いを正確に理解し,手続きを一つずつ丁寧に追跡することがポイントになります。