応用情報22年秋 午前 問5
【中分類】
アルゴリズムとデータ構造−1.データ構造
−(2)データ構造の種類−2.リスト
【問題を解く前に】
今回は、まず問題文の読み方について、この問題を例に説明します。
・問題文の読み方
1.はじめにざっと読み、何を聞いているか、確認する
→今回は、「ポインタをたどる回数が最も多いのはどれか。」
2.解答群をみて、解答のポイントをはっきりさせる。
→聞いていることは2つ。
・先頭と末尾
・追加と削除
この組み合わせ
3.解答を解くための条件をおさえる。
・先頭からつながる単方向の線形リスト
・先頭、末尾ポインタは持っている
・追加するデータは、すぐにわかる
これは、情報処理試験に限らず、たいていの試験に使えます(2に関しては、択一式しか使えませんが)。ただし、TOEICなどのヒアリング試験では、この方法は使えません(やり方が限定されます。ただし、それらにも解くテクニックがあるので、そういう試験を受ける人は、それらの試験の参考書を見てください)
【解き方】
まず、具体的に(数値を入れて)考えます。
5個のデータがあって、6個目を追加するとします。
こんな図
(A)6個目のアドレスは、「追加するデータは、すぐにわかる」ということにより、 一発で見つかるとします。
(B)先頭アドレスと、末尾アドレスは、そのアドレスを持っているので、
一発で見つかります。
(C)他のものについては、前から順にたどり、前のものがわかれば、次のものが一発で判る。
つまり、2のアドレスは、1のアドレスがわかっていれば、一発。
3のアドレスは、1のアドレスがわかっていれば、
1→2→3で、2発。
ということです。
-
-
- -
-
さて、以下、問題文を考えていきます。
(ア)先頭に追加
すべき処理は
・先頭アドレスを見つける*
→上記(B)より一発
・追加するアドレスを見つける
→上記(A)より一発
・追加するアドレスを先頭アドレスエリアにコピー
→問題は、参照回数を聞いているので、コピー時間は含みません
・追加するアドレスのNEXTに、*のアドレスをコピー
→問題は、参照回数を聞いているので、コピー時間は含みません
合計2発
-
- -
(イ)先頭のデータを削除する処理
すべき処理は
・先頭アドレスを見つけます*
→上記(B)より一発
・先頭の次のアドレスを見つけます★
→*の次なので、一発
・★のアドレスを、先頭アドレスエリアにコピー
→問題は、参照回数を聞いているので、コピー時間は含みません
・*をフリーする
→問題は、参照回数を聞いているので、フリー時間は含みません
合計2発
-
- -
(ウ)末尾にデータを追加する処理
すべき処理は
・末尾のアドレスを見つける*
→上記(B)より一発
・追加するアドレスを見つける★
→上記(A)より一発
・末尾アドレスエリアに、★をコピーする
→問題は、参照回数を聞いているので、コピー時間は含みません
・*のNEXTに、★をコピーする
→問題は、参照回数を聞いているので、コピー時間は含みません
合計2発
-
- -
(エ)末尾を削除
すべき処理は
・末尾のアドレスを見つける*
→上記(B)より一発
・末尾の前のアドレスを見つける★
→*の前(prev)というのはないので、
先頭→2→3→4と聞いていかないといけない■
・末尾アドレスエリアに★をコピー
→問題は、参照回数を聞いているので、コピー時間は含みません
・*をフリーする
→問題は、参照回数を聞いているので、フリー時間は含みません
合計:一発+■=2発以上、たくさん。
【答え】
(エ)
【解き終わって】
なお、この問題は、受験テクニック的にも、予想が付きます。
先頭ポインタからつながっている
→たぶん、末尾のほうが大変なんだろう。
追加する〜→追加が楽ということが言いたいらしい
→たぶん、削除のほうが大変なんだろう。
聞いているのは、回数が多い→末尾の削除の組み合わせが一番大変?
ただ、これは、危険な方法で、まじめにちゃんと解いたほうがいいです。
もし、「まったく想像が付かない」などというときだけ、使ってください。
-
- -
それと、ポインタを使った、このようなリスト処理については、実務上も出来たほうがいいです(特にC言語を使っている人)。
単方向(NEXTのみ)だけでなく、双方向リンク(NEXT,PREV両方持つ)の場合の追加、削除、検索処理は、おさえておいてください。
なお、C言語以外の人は、このような処理は、Iteratorで内部的にやってくれます。なので、受験的に、上記のリンクについて覚えると同時に、自分の言語では、Iteratorをどのように使うのか?についても、確認しておいてください。
【受験テクニック】
・問題文の読み方
1.はじめにざっと読み、何を聞いているか、確認する
2.解答群をみて、解答のポイントをはっきりさせる。
3.解答を解くための条件をおさえる。
・具体的に(数値を入れて)考える
→これについては、注意点があります。その注意点も含めて、
詳しい話は、問7で説明します。