単方向リストを、値を持つdataと次の要素番号を持つnextの二つの配列で表す。要素番号は1から始まり、nextの値0はリストの終端であって配列の要素番号ではない。先頭は要素1である。次の処理で要素4を挿入した後、出力される値の順序はどれか。 整数型の配列: data ← {10, 20, 30, 25} 整数型の配列: next ← {2, 3, 0, 0} 整数型: current next[4] ← next[2] next[2] ← 4 current ← 1 while (current ≠ 0) data[current]を出力する current ← next[current] endwhile
本サイトで独自に作成。IPAの試験問題からの転載ではありません。
公開日:
選択肢を選んで、答え合わせをしましょう。
回答せずに正解・解説を確認する
正解:ア 10、20、25、30
この表示だけでは、回答数や正答率は変わりません。
解説
まずnext[4]へ元のnext[2]の3を保存し、次にnext[2]を4へ変更します。リンクの順は1 → 2 → 4 → 3 → 0です。この順にdataを読むため、10、20、25、30を出力します。配列dataの物理的な順番自体は変えていません。
要素番号1、2、4、3をたどり、それぞれの値を出力した順序です。
dataを要素番号順に読む場合の並びです。今回はnextで決まるリンク順に読みます。
挿入位置は要素1の後ではなく、要素2の後です。
next[4]には3が保存されるため、25の後に30も出力されます。
関連知識
挿入では元の後続要素への参照を失わないことが重要です。next[2]を先に4へ変え、その値をnext[4]へコピーすると、自分自身を指すリンクができて正しくたどれません。
間違えやすいポイント
配列に格納された順序と、リンクをたどる論理的な順序を区別します。currentが0になったら停止し、data[0]は読みません。
覚え方
後ろへのつながりを保存してから、新しい要素へつなぐ。
実務での意味
空き領域の管理や、順序を頻繁に変更するデータ構造の仕組みを理解するのに役立ちます。
解説:本サイト編集部によるオリジナル文章