welcome: please sign in

2009-11-05 12:46:47時点のリビジョン24

メッセージを消す
location: 線形リスト

線形リスト

線形リストは同じ形式のデータが一列に並んだものです。

データの追加や削除が配列と比べて楽に行えます。
真ん中あたりにデータを追加する場合を考えると分かります。

Javaで記述してみましょう。


このようなインスタンスを使います。

3つのインスタンスをつないだ例を示します。

nullはシステムで用意されている定数です。


追加

途中にデータを追加するには、リンク2箇所を修正すればよい。


削除

途中のデータを削除するには、リンク1箇所を修正すればよい。

削除されたデータからのリンクが残っていますが、リストをたどってこのデータにたどり着くことはできません。


サンプル

値としてItemクラスのインスタンスを使った例です。

クラス名は List1 としました。

属性(インスタンス変数)の型は

となります。

mainメソッドでは、変数a,b,cの3つを用いて図のようなリストを作っています。

最後に

により、aに対してメソッドdispList()を行っています。

メソッドの動作を追っかけてみましょう。

  1. aの値がthisに対応づけられます。
  2. x = this; により、thisに入っている値が変数xに代入されます。これはaの値と同じです。
  3. 11行目のwhileの条件判定を行います。xには先に作ったリストの参照が入っており、nullではありません。
  4. 13行目でx.valすなわちItemインスタンス(値はパン)に対しdisp()を行うことで、この内容を表示します。
  5. 14行目でxの値をリンクの値で更新します。この結果xはリストの2番目の項目を指すことになります。
  6. 再び11行目のwhileの条件判定を行います。xはリストの2番目の項目を指しており、nullではありません。
  7. 13行目でx.valすなわちItemインスタンス(値はコーヒー)に対しdisp()を行うことで、この内容を表示します。
  8. 14行目でxの値をリンクの値で更新します。この結果xはリストの3番目の項目を指すことになります。
  9. 再び11行目のwhileの条件判定を行います。xはリストの3番目の項目を指しており、nullではありません。
  10. 13行目でx.valすなわちItemインスタンス(値はみかん)に対しdisp()を行うことで、この内容を表示します。
  11. 14行目でxの値をリンクの値で更新します。リンクの値はnullなのでxの値もnullになります。
  12. 再び11行目のwhileの条件判定を行います。xはnullです。
  13. whileループを抜け、メソッドの実行も終わります。