次のプログラム中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 単方向リストを、配列dataListと配列pointerListの二つの配列で表現する。dataListにリストの要素の値を格納し、pointerListにリストの次の要素に対応するdataListの要素番号を格納する。単方向リストの先頭は、dataList[1]及びpointerList[1]の組みである。単方向リストの末尾に対応するpointerListの要素は未定義である。dataListのうち単方向リストの要素の値を格納していない要素と、対応するpointerListの要素は未定義である。 プログラムが扱うdataList及びpointerListの内容を図1に示す。先頭の次の要素の要素番号は、pointerList[1]に格納された3であり、値はdataList[3]に格納された20である。その次の要素の要素番号はpointerList[3]に格納された2であり、値はdataList[2]に格納された30である。 関数orderListは、図1のdataList及びpointerListで表現した単方向リストの値を、単方向リストの先頭からたどって順番に格納した配列を返す。関数orderListが返す配列を図2に示す。
リストは次ポインタの未定義で終端を判定して進む

```
〔プログラム〕
大域: 整数型の配列: dataList ← {10, 30, 20, 40, 未定義の値}
大域: 整数型の配列: pointerList ← {3, 4, 2, 未定義の値, 未定義の値}
○整数型の配列: orderList()
整数型: i, p ← 1
整数型の配列: linearList ← {} // 要素数0の配列
for (i を 1 から dataListの要素数 まで 1 ずつ増やす)
linearListの末尾 に dataList[p]の値 を追加する
if ( a が 未定義)
繰返し処理を終了する
endif
p ← b
endfor
return linearList
```
選択肢
- アa: dataList[p]、b: i
- イa: dataList[p]、b: pointerList[p]
- ウa: pointerList[p]、b: i
- エa: pointerList[p]、b: pointerList[p]
正解と解説
正解:エ a: pointerList[p]、b: pointerList[p]
単方向リストをたどる処理では、現在位置 p の値を取り出した後、次の要素番号を pointerList[p] から得ます。末尾に達したかどうかは「次を指すポインタが未定義かどうか」で判定するので、空欄 a は pointerList[p] です。判定を通過したら空欄 b で p ← pointerList[p] として次へ進みます。dataList[p] を判定に使うと、値が未定義でなくてもリンクが切れている場合を捉えられず、i を代入すると連結順ではなく要素番号順にたどってしまいます。
選択肢ごとの解説
- ア終了判定を値側で行っており、次を指すポインタの有無を見ていません。
- イ終了判定が誤りです。次への移動は正しいものの、a では末尾を判定できません。
- ウ終了判定は正しいものの、p に i を入れると連結順ではなく先頭からの要素番号順になります。
- エ正解。pointerList[p] で末尾を判定し、同じ値で次の要素番号へ進みます。
同じ分野の他の問題
- 次のプログラム中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。…2025年度 公開問題 科目B 問3
- 図の木構造は2分探索木である。a〜gの値の大小関係として,適切なものはどれか。ここで,a〜gの値は重複しないものとする。2025年度 公開問題 科目A 問3
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 図1に示すグラフの…2024年度 公開問題 科目B 問3
- 双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表…2023年度 公開問題 科目A 問2
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 手続delNodeは、単方向リストから、引数posで指定…2022年度 公開問題 科目B 問10
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。