単方向リストへの要素の追加【基本情報技術者試験 科目B サンプル問題】

(令和4年度4月公開) 基本情報技術者試験 サンプル問題 科目B 問3のブログのアイキャッチ画像 基本情報技術者試験 科目B 公開問題

← 科目Bの公開問題一覧へ戻る

 基本情報技術者試験の科目Bのサンプル問題を題材に,単方向リストへの要素の追加について学習します。この問題では,参照をたどってリストの末尾を探し,新しい要素を追加する処理を確認します。

広告

(令和4年度4月公開) 基本情報技術者試験 サンプル問題 科目B 問3

問 次のプログラム中の   a   と   b   に入れる正しい答えの組合せを,解答群の中から選べ。

 手続 append は,引数で与えられた文字を単方向リストに追加する手続である。単方向リストの各要素は,クラス ListElement を用いて表現する。クラス ListElement の説明を図に示す。ListElement 型の変数はクラス ListElement のインスタンスの参照を格納するものとする。大域変数 listHead は,単方向リストの先頭の要素の参照を格納する。リストが空のときは,listHead は未定義である。

「(令和4年度4月) 基本情報技術者試験 サンプル問題 科目B 問3」の問題画像

〔プログラム〕

大域: ListElement: listHead ← 未定義の値

○append(文字型: qVal)

 ListElement: prev, curr

 curr ← ListElement(qVal)

 if (listHead が   a   )

  listHead ← curr

 else

  prev ← listHead

  while (prev.next が 未定義でない)

   prev ← prev.next

  endwhile

  prev.next ←   b  

 endif

解答群

a

b

ア未定義curr
イ未定義curr.next
ウ未定義listHead
エ未定義でないcurr
オ未定義でないcurr.next
カ未定義でないlistHead

【解答】ア

【解説】

ListElement は,データ(val)と次の要素への参照(next)を持つクラスである。手続 append は,引数で与えられた文字を単方向リストの末尾に追加する。

リストが空の場合は,listHead が未定義である。そのため,listHead ← curr として,新しく作成した要素を先頭にする。よって,a は未定義である。

リストが空でない場合は,prev ← listHead から始め,prev.next を順番にたどって末尾の要素を探す。末尾の要素では next が未定義なので,そこで探索を終了する。その後,末尾の要素の next に,新しく作成した要素 curr への参照を設定する。したがって,b は curr である。

【参考】

「(令和4年度4月) 基本情報技術者試験 サンプル問題 科目B 問3」の解答画像

この問題のポイント

 この問題から学べることは,

  • 単方向リストの基本的な構造
  • val と next を使ってリストの要素を表現する方法
  • 参照をたどってリストの末尾を探す方法
  • リストの末尾に新しい要素を追加する方法
  • トレース表を使って,リストの要素や参照の変化を追跡する方法

です。特に,prev.next を順番にたどって末尾の要素を探し,その next に新しい要素への参照を設定する処理を理解しておきましょう。

基本情報技術者試験の学習におすすめの参考書

基本情報技術者試験の合格を目指す方におすすめの参考書です。

科目Bのアルゴリズム・擬似言語を基礎から学びたい方に。私も実際に読んでみましたが,変数・配列・リストなどの基礎から,擬似言語,例題・演習問題まで段階的に扱っており,取り組みやすい構成になっています。
¥2,200 (2026/09/17 08:58時点 | Amazon調べ)

学習のお役に立ちましたら

この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。

よろしければ,このサイトを応援いただけますと嬉しいです。

※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。

広告