アルゴリズムとプログラミング
基本情報技術者試験「スタック・キュー」の問題
容量 4 の循環キュー(リングバッファ)を配列 buf[1..4] で実装する。head は次に取り出す位置、tail は次に入れる位置で、初期は head=1, tail=1, 個数 cnt=0。enq は buf[tail] に格納し tail を 1 進め(4 の次は 1 に戻る)cnt を +1、deq は buf[head] を返し head を 1 進め cnt を −1 する。空の状態から次を実行したあとの (head, tail, cnt) の組はどれか。
○手続: run() enq(11) enq(22) enq(33) deq() enq(44) enq(55) deq()
ア(head,tail,cnt)=(2,1,4)
イ(head, tail, cnt) = (1, 2, 3)(巡回未反映)
ウ(head, tail, cnt) = (3, 2, 3)
エ(head, tail, cnt) = (3, 1, 2)
正解
ウ.(head, tail, cnt) = (3, 2, 3)
enq で tail が進み、deq で head が進む。いずれも 4 の次は 1 に戻る。操作を順に追うと head=3、tail=2、cnt=3 に到達するため ウが正しい。
?選択肢ごとの解説
ア ×deq を 1 回しか反映せず cnt を 4 のままにし、head・tail も 1 つずつずらした誤りである。
イ ×巡回(4 の次が 1)を反映せず head・tail を初期付近に留めた、ラップアラウンドの見落としである。
ウ ○enq で tail が進み、deq で head が進む。いずれも 4 の次は 1 に戻る。操作を順に追うと head=3、tail=2、cnt=3 に到達するため ウが正しい。
エ ×cnt の増減を取り違え、enq と deq の回数差を 2 と誤って cnt=2 とした計数の誤りである。
アルゴリズムとプログラミングの他の問題
次の擬似言語で表される手続 sumOdd を、引数として要素数 5 の整数型の配列 {12, 125, 1008,…次の擬似言語は、整数型の配列 arr に対して隣接交換を行う手続の一部であり、外側ループの 1 回目(1…次の擬似言語は昇順に整列された配列 arr に対する二分探索の手続である。arr = {2, 4, 6, 8, 10,…次の擬似言語で表される再帰手続 f を、引数 n = 20 で呼び出したとき、戻り値として返される値はどれか。
```…単方向連結リストの各ノードはメンバ val(整数)と next(次ノードへの参照。なければ NULL)をもつ。先頭ノード…スタックに対する push(積む)と…
この問題の「深掘り・誤答の完全解説・試験のコツ・覚え方」はアプリで。
無料ではじめる →基本情報技術者試験の全問を、一問ごとにAIの8-ways解説つきで。SRS暗記カード・全真模試・弱点診断まで。まずは無料で。
作成・校閲:ukamiru編集部 · 基本情報技術者試験 過去問 · fe-b-algo-0107
