<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>線形リスト</title><revhistory><revision><revnumber>41</revnumber><date>2010-11-29 13:13:10</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>40</revnumber><date>2010-11-24 00:58:49</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>39</revnumber><date>2010-11-23 13:23:04</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>38</revnumber><date>2010-11-23 13:12:34</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>37</revnumber><date>2010-11-23 13:04:50</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>36</revnumber><date>2010-11-23 12:51:07</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>35</revnumber><date>2010-11-23 12:50:45</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>34</revnumber><date>2010-11-23 12:45:47</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>33</revnumber><date>2010-11-23 12:44:01</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>32</revnumber><date>2010-11-23 12:35:35</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>31</revnumber><date>2010-11-23 12:34:01</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>30</revnumber><date>2010-11-23 12:22:13</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>29</revnumber><date>2010-11-23 12:18:37</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>28</revnumber><date>2010-11-23 12:13:57</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>27</revnumber><date>2010-11-23 12:05:15</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>26</revnumber><date>2010-11-23 12:04:25</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>25</revnumber><date>2010-11-22 07:27:14</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>24</revnumber><date>2009-11-05 12:46:47</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>23</revnumber><date>2009-11-05 12:39:39</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>22</revnumber><date>2009-11-05 12:35:46</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>21</revnumber><date>2009-11-05 12:30:28</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>20</revnumber><date>2009-11-05 12:28:54</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>19</revnumber><date>2009-11-05 12:25:57</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>18</revnumber><date>2009-11-05 12:23:59</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>17</revnumber><date>2009-11-05 12:19:29</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>16</revnumber><date>2009-11-05 12:16:56</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>15</revnumber><date>2009-11-05 12:16:16</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>14</revnumber><date>2009-11-05 12:14:19</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>13</revnumber><date>2009-11-05 04:19:54</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>12</revnumber><date>2009-11-05 04:17:06</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>11</revnumber><date>2009-11-05 04:05:05</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>10</revnumber><date>2009-11-05 04:03:21</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>9</revnumber><date>2009-11-05 04:02:32</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>8</revnumber><date>2009-11-05 04:00:08</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>7</revnumber><date>2009-11-05 03:59:13</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>6</revnumber><date>2009-11-05 03:57:22</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2009-11-05 03:54:59</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2009-11-05 03:53:24</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2009-11-05 03:53:14</date><authorinitials>masahiko</authorinitials><revremark>名前を'リスト処理'から変更。</revremark></revision><revision><revnumber>2</revnumber><date>2009-10-23 06:02:28</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2009-10-23 06:02:07</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>線形リスト</title><para>同じ形式のデータが一列に並んでおり、 前から順にたどりながら参照できる形のものを<emphasis role="strong">線形リスト</emphasis>といいます。 </para><para>これも<emphasis role="strong">線形リスト</emphasis>の１種です。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E7%B7%9A%E5%BD%A2%E3%83%AA%E3%82%B9%E3%83%88?action=AttachFile&amp;do=get&amp;target=chain42.png"/></imageobject><textobject><phrase>chain42.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>線形リストの特徴 </para><orderedlist numeration="arabic"><listitem><para>前から順にすべてのデータをたどることができます。 </para></listitem><listitem><para>データの追加や削除が配列と比べて楽に行えます。 </para></listitem></orderedlist><!--rule (<hr>) is not applicable to DocBook--><section><title>線形リストの修正</title><para>次のような処理を考えましょう。 </para><itemizedlist><listitem><para>リストの先頭に追加 </para></listitem><listitem><para>リストの途中に追加 </para></listitem><listitem><para>リストの最後に追加 </para></listitem><listitem><para>リストの先頭を削除 </para></listitem><listitem><para>リストの途中を削除 </para></listitem><listitem><para>リストの最後を削除 </para></listitem></itemizedlist><para>つぎのことが分かっています。 </para><para>追加する場合 </para><itemizedlist><listitem override="none"><para>追加したい位置の直前にあるオブジェクトを参照できれば簡単に行える。 </para></listitem></itemizedlist><para>削除する場合 </para><itemizedlist><listitem override="none"><para>取り除きたい位置の直前にあるオブジェクトを参照できれば簡単に行える。 </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>つながっているものすべてを表示するメソッド</title><para>これは以前に作成したものです。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[showAll]]></methodname><![CDATA[()]]>
<![CDATA[{]]>
<![CDATA[        ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[ ]]><methodname><![CDATA[c]]></methodname><![CDATA[;]]>

<![CDATA[        ]]><methodname><![CDATA[c]]></methodname><![CDATA[ = ]]><token><![CDATA[this]]></token><![CDATA[;]]>
<![CDATA[        ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[println]]></methodname><![CDATA[(]]><phrase><![CDATA["("]]></phrase><![CDATA[);]]>
<![CDATA[        ]]><token><![CDATA[while]]></token><![CDATA[ (]]><methodname><![CDATA[c]]></methodname><![CDATA[ != ]]><symbol><![CDATA[null]]></symbol><![CDATA[)]]>
<![CDATA[        {]]>
<![CDATA[                ]]><methodname><![CDATA[c]]></methodname><![CDATA[.]]><methodname><![CDATA[show]]></methodname><![CDATA[();]]>
<![CDATA[                ]]><methodname><![CDATA[c]]></methodname><![CDATA[ = ]]><methodname><![CDATA[c]]></methodname><![CDATA[.]]><methodname><![CDATA[next]]></methodname><![CDATA[;]]>
<![CDATA[        }]]>
<![CDATA[        ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[println]]></methodname><![CDATA[(]]><phrase><![CDATA[")"]]></phrase><![CDATA[);]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist><para>これをもとにして、次の２つのメソッドを作成します。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>つながっている個数を返すメソッド</title><para>つながっている個数を返すメソッドlengthを作ります。 </para><para>返す値はintです。次の修正が必要。 </para><itemizedlist><listitem><para>メソッドの型宣言 </para></listitem><listitem><para>return </para></listitem></itemizedlist><para>処理内容 </para><itemizedlist><listitem override="none"><para>showAllではオブジェクト１つずつに対してshowを行っていたので、 ここでカウントを行えばよい。 </para></listitem></itemizedlist><para>変数の宣言と初期化を加え、不要な部分を除けば完成。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><token><![CDATA[int]]></token><![CDATA[ ]]><methodname><![CDATA[length]]></methodname><![CDATA[()]]>
<![CDATA[{]]>
<![CDATA[        ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[ ]]><methodname><![CDATA[c]]></methodname><![CDATA[ = ]]><token><![CDATA[this]]></token><![CDATA[;]]>
<![CDATA[        ]]><token><![CDATA[int]]></token><![CDATA[ ]]><methodname><![CDATA[cnt]]></methodname><![CDATA[ = 0;]]>

<![CDATA[        ]]><token><![CDATA[while]]></token><![CDATA[ (]]><methodname><![CDATA[c]]></methodname><![CDATA[ != ]]><symbol><![CDATA[null]]></symbol><![CDATA[)]]>
<![CDATA[        {]]>
<![CDATA[                ]]><methodname><![CDATA[cnt]]></methodname><![CDATA[++;]]>
<![CDATA[                ]]><methodname><![CDATA[c]]></methodname><![CDATA[ = ]]><methodname><![CDATA[c]]></methodname><![CDATA[.]]><methodname><![CDATA[next]]></methodname><![CDATA[;]]>
<![CDATA[        }]]>
<![CDATA[        ]]><token><![CDATA[return]]></token><![CDATA[ ]]><methodname><![CDATA[cnt]]></methodname><![CDATA[;]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>指定された位置にあるオブジェクトを返すメソッド</title><para>定された位置にあるオブジェクトを返すメソッドnthを作ります。 </para><itemizedlist><listitem><para>引数として位置を表す数値(int)を取ります。 </para></listitem><listitem><para>返す値はChainです。 </para></listitem></itemizedlist><para>次の修正が必要。 </para><itemizedlist><listitem><para>メソッドの型宣言 </para></listitem><listitem><para>return </para></listitem></itemizedlist><para>処理内容 </para><itemizedlist><listitem override="none"><para>カウントを行い指定の箇所まできたら、そのとき指しているオブジェクトを返せばよい。 </para></listitem></itemizedlist><para>条件はwhileの条件に追加。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><methodname><![CDATA[Chain]]></methodname><![CDATA[ ]]><methodname><![CDATA[nth]]></methodname><![CDATA[(]]><token><![CDATA[int]]></token><![CDATA[ ]]><methodname><![CDATA[n]]></methodname><![CDATA[)]]>
<![CDATA[{]]>
<![CDATA[        ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[ ]]><methodname><![CDATA[c]]></methodname><![CDATA[ = ]]><token><![CDATA[this]]></token><![CDATA[;]]>
<![CDATA[        ]]><token><![CDATA[int]]></token><![CDATA[ ]]><methodname><![CDATA[cnt]]></methodname><![CDATA[ = 0;]]>

<![CDATA[        ]]><token><![CDATA[while]]></token><![CDATA[ (]]><methodname><![CDATA[c]]></methodname><![CDATA[ != ]]><symbol><![CDATA[null]]></symbol><![CDATA[ && ]]><methodname><![CDATA[cnt]]></methodname><![CDATA[ < ]]><methodname><![CDATA[n]]></methodname><![CDATA[)]]>
<![CDATA[        {]]>
<![CDATA[                ]]><methodname><![CDATA[cnt]]></methodname><![CDATA[++;]]>
<![CDATA[                ]]><methodname><![CDATA[c]]></methodname><![CDATA[ = ]]><methodname><![CDATA[c]]></methodname><![CDATA[.]]><methodname><![CDATA[next]]></methodname><![CDATA[;]]>
<![CDATA[        }]]>
<![CDATA[        ]]><token><![CDATA[return]]></token><![CDATA[ ]]><methodname><![CDATA[c]]></methodname><![CDATA[;]]>
<![CDATA[}]]>
</programlisting></listitem><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E7%B7%9A%E5%BD%A2%E3%83%AA%E3%82%B9%E3%83%88?action=AttachFile&amp;do=get&amp;target=chain41.png"/></imageobject><textobject><phrase>chain41.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>メソッド内でメソッドを使う</title><para>メソッド内でメソッドを呼び出すこともできます。 </para><para>このメソッドは次回使うので追加しておくこと。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[showContent]]></methodname><![CDATA[()]]>
<![CDATA[{]]>
<![CDATA[        ]]><methodname><![CDATA[next]]></methodname><![CDATA[.]]><methodname><![CDATA[showAll]]></methodname><![CDATA[();]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>線形リストを修正する</title><para>上で作成したメソッドを使うと、リストの修正が簡単にできます。 </para><para>例 </para><itemizedlist><listitem override="none"><para>aが参照しているリストの３番目のオブジェクトを削除する。 </para><screen><![CDATA[Chain a, temp;
...
temp = a.nth(2);
temp.next = temp.next.next;]]></screen></listitem></itemizedlist></section></section></article>