新らしくなった基本情報 科目 B アルゴリズムとプログラミング サンプル問題3をJavaにしてみました

2023 年 4 月からIPA (独立行政法人情報処理推進機構)の基本情報技術者試験の制度が変更されました。

ここでは、「基本情報技術者試験 科目 B のサンプル問」の中から、アルゴリズムとプログラミングの問題を取り上げ、Javaのソースコードを示します。

新人エンジニア研修に参加されている皆様の参考になれば幸いです。

問 3

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

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

メンバ変数説明
val文字型リストに格納する文字。
nextListElementリストの次の文字を保持するインスタンスの参照。初期状態は未定義である。
コンストラクタ説明
ListElement(文字型: qVal)引数 qVal でメンバ変数 val を初期化する。

図 クラス ListElement の説明

【プログラム】

大域: 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


【解答群】

ab
未定義curr
未定義curr.next
未定義listHead
未定義でないcurr
未定義でないcurr.next
未定義でないlistHead

【Javaプログラム】

【結果】

LinkedList: s a y c o n

【プログラムの解説】

このプログラムは、単方向連結リストを実装し、新しい要素をリストの末尾に追加するメソッド append を定義しています。

ListElement クラスは、リストの要素を表すためのクラスで、char 型の val フィールドと、次の要素を指す next フィールドを持ちます。

LinkedList クラスは、リストの先頭要素を表す listHead フィールドを持ち、append メソッドが定義されています。append メソッドは、新しい要素をリストの末尾に追加するためのメソッドです。リストが空の場合は、新しい要素をリストの先頭に設定します。リストに既に要素がある場合は、リストの末尾に新しい要素を追加します。

printList メソッドは、リストの中身を表示するためのメソッドです。listHead フィールドからリストの先頭要素を取得し、次の要素が null になるまで、各要素の val フィールドの値を表示します。

テストクラス Q3 では、LinkedList クラスのインスタンスを作成し、append メソッドで要素を追加しています。最後に、printList メソッドを呼び出して、リストの内容を表示しています。