応用情報技術者 2010年 秋期 午前2 問05
問題文
先頭ポインタと末尾ポインタをもち、多くのデータがポインタでつながった単方向の線形リストの処理のうち、先頭ポインタ、末尾ポインタ又は各データのポインタをたどる回数が最も多いものはどれか。ここで、単方向のリストは先頭ポインタからつながっているものとし、追加するデータはポインタをたどらなくても参照できるものとする。
選択肢
ア:先頭にデータを追加する処理
イ:先頭のデータを削除する処理
ウ:末尾にデータを追加する処理
エ:末尾のデータを削除する処理(正解)
先頭ポインタと末尾ポインタをもち、多くのデータがポインタでつながった単方向の線形リストの処理のうち、先頭ポインタ、末尾ポインタ又は各データのポインタをたどる回数が最も多いものはどれか【午前2 解説】
要点まとめ
- 結論:単方向リストで末尾のデータを削除する処理が最も多くポインタをたどる必要があります。
- 根拠:先頭ポインタと末尾ポインタは保持していても、末尾の前の要素を特定するには先頭から順に辿る必要があるためです。
- 差がつくポイント:単方向リストの構造理解と、各操作のポインタ追跡回数の違いを正確に把握することが重要です。
正解の理由
単方向リストは各ノードが次のノードへのポインタを持ち、先頭ポインタと末尾ポインタがある場合でも、末尾の直前のノードを特定するには先頭から順に辿る必要があります。
「末尾のデータを削除する処理」では、末尾ノードの前のノードを見つけるために全ノードを辿るため、ポインタをたどる回数が最も多くなります。
他の操作は先頭や末尾のポインタを直接参照できるため、ポインタ追跡回数は少なく済みます。
「末尾のデータを削除する処理」では、末尾ノードの前のノードを見つけるために全ノードを辿るため、ポインタをたどる回数が最も多くなります。
他の操作は先頭や末尾のポインタを直接参照できるため、ポインタ追跡回数は少なく済みます。
よくある誤解
単方向リストで末尾のノードを削除する際に、末尾ポインタがあるからすぐ削除できると誤解しがちです。
しかし、末尾の前のノードを特定するためには先頭から辿る必要があり、時間がかかります。
しかし、末尾の前のノードを特定するためには先頭から辿る必要があり、時間がかかります。
解法ステップ
- 単方向リストの構造を理解する(各ノードは次のノードへのポインタのみ持つ)。
- 先頭ポインタと末尾ポインタの役割を確認する。
- 各操作(追加・削除)がどのノードに影響するかを考える。
- 末尾のデータを削除する場合、末尾の前のノードを探す必要があることを認識する。
- そのため、先頭から末尾の前まで全ノードを辿る必要があり、ポインタ追跡回数が最大になると判断する。
選択肢別の誤答解説
- ア: 先頭にデータを追加する処理
→ 先頭ポインタがあるため、追加は即座に行えポインタ追跡は少ない。 - イ: 先頭のデータを削除する処理
→ 先頭ポインタを更新するだけで済み、ポインタ追跡は最小限。 - ウ: 末尾にデータを追加する処理
→ 末尾ポインタがあるため、追加は即座に行える。 - エ: 末尾のデータを削除する処理
→ 末尾の前のノードを探すために先頭から辿る必要があり、最も多くポインタをたどる。
補足コラム
単方向リストは各ノードが次のノードへのポインタのみを持つため、前のノードに戻ることができません。
これに対し、双方向リストは前後両方向のポインタを持つため、末尾の削除も効率的に行えます。
データ構造の特性を理解し、操作の効率を考えることが重要です。
これに対し、双方向リストは前後両方向のポインタを持つため、末尾の削除も効率的に行えます。
データ構造の特性を理解し、操作の効率を考えることが重要です。
FAQ
Q: 末尾ポインタがあるのに、なぜ末尾の前のノードを探す必要があるのですか?
A: 末尾ポインタは末尾ノードを指しますが、削除時には末尾の前のノードのポインタを書き換える必要があり、そのノードを特定するために先頭から辿る必要があります。
A: 末尾ポインタは末尾ノードを指しますが、削除時には末尾の前のノードのポインタを書き換える必要があり、そのノードを特定するために先頭から辿る必要があります。
Q: 先頭にデータを追加する処理はなぜポインタ追跡が少ないのですか?
A: 先頭ポインタがあるため、新しいノードの次ポインタを先頭ノードに向けて先頭ポインタを更新するだけで済み、他のノードを辿る必要がありません。
A: 先頭ポインタがあるため、新しいノードの次ポインタを先頭ノードに向けて先頭ポインタを更新するだけで済み、他のノードを辿る必要がありません。
関連キーワード: 単方向リスト、ポインタ操作、データ構造、線形リスト、リスト削除処理

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

