FE Study
FE Study メニュー

学習記録はこのブラウザー内に保存されます。

ホーム問題を解く
ログイン不要・無料で学習

ONE QUESTION, ONE STEP

循環キューを学ぼう

選んで、確かめて、理解する。焦らず進めましょう。

QUESTION 57

5要素の配列bufferを使う循環キューで、headは次に取り出す位置、tailは次に追加する位置を表す。要素番号は1から始まる。buffer、head、tailは各手続きが共有し、更新は呼出し後も残る。初期状態では先頭から40、50、60が入っている。取出し()、追加(70)、取出し()の順に実行した後の状態はどれか。空や満杯に対する操作は起きない。取出した場所の値は消さなくてもよいものとする。 整数型の配列: buffer ← {60, 0, 0, 40, 50} 整数型: head ← 4 整数型: tail ← 2 ○ 整数型: 次位置(整数型: p) if (p = 5) return 1 else return p + 1 endif ○ 整数型: 取出し() 整数型: result ← buffer[head] head ← 次位置(head) return result ○ 追加(整数型: value) buffer[tail] ← value tail ← 次位置(tail)

出典:本サイト オリジナル教材(2026年)

本サイトで独自に作成。IPAの試験問題からの転載ではありません。

公開日:

解答を一つ選んでください

選択肢を選んで、答え合わせをしましょう。

回答せずに正解・解説を確認する

正解:エ head = 1、tail = 3、先頭から60、70

この表示だけでは、回答数や正答率は変わりません。

解説

1回目の取出しはbuffer[4]の40を返し、headは5です。追加(70)でbuffer[2]に70を書き、tailは3になります。2回目の取出しはbuffer[5]の50を返し、headは末尾5の次である1へ戻ります。残る有効な要素はbuffer[1]の60とbuffer[2]の70なので、先頭から60、70です。

ア

追加(70)でtailは2から3へ進みます。次に書く位置を指すという定義を確認します。

イ

これは1回目の取出しと追加の後です。2回目の取出しで50も取り除かれます。

ウ

head=1のbuffer[1]は60です。追加した70はその後ろです。

エ

添字の折返しと、先入れ先出しの順序の両方を満たしています。

関連知識

循環キューは配列の末尾まで進むと先頭へ戻って領域を再利用します。削除した場所に古い数値が残っていても、headとtailなどで定める有効範囲の外ならキューの要素ではありません。

間違えやすいポイント

添字を進めるだけで6にしてはいけません。末尾5の次は1です。また、tailは最後の要素ではなく次の書込み位置です。

覚え方

headは次に読む、tailは次に書く、末尾の次は先頭。

実務での意味

固定サイズの受信バッファや生産者・消費者の待ち行列を読むときに使います。同時実行する実装では別途同期が必要です。

解説:本サイト編集部によるオリジナル文章

この問題の前後に、プログラミングの基礎知識ガイドで、 仕組み・比較・解き方を確認できます。 この問題の誤りを報告する(GitHub)。問題IDとURLを入力した下書きが開きます。自動投稿は行いません。 投稿は公開されるため、氏名・住所・メールアドレス・学習記録は記入しないでください。 詳しくはお問い合わせ窓口をご覧ください。