List 連鎖の基礎

Lst.val= 5
Lst.val= 4
Lst.val= 3
Lst.val= 2
Lst.val= 1

C# で連鎖構造をプログラムします。
C# に備わっている ListView は C# ListBox & ListView を参照して下さい。

前田稔(Maeda Minoru)の超初心者のプログラム入門

List 連鎖

  1. 次のファイルを格納して下さい。
    /*****************************/
    /*★ Data List     前田 稔 ★*/
    /*****************************/
    using System;
    
    class console
    {
        public static void Main()
        {
            Lst pt1 = new Lst(1);
            Lst pt2 = new Lst(2);
            Lst pt3 = new Lst(3);
            pt1.ptr = pt2;
            pt2.ptr = pt3;
            pt3.ptr = null;
    
            Console.WriteLine("Lst.val= {0}",pt1.val);
            Console.WriteLine("Lst.val= {0}", pt1.ptr.val);
            Console.WriteLine("Lst.val= {0}", pt1.ptr.ptr.val);
            System.Console.ReadLine();
        }
    }
    
    class Lst
    {
        public  Lst ptr;
        public  int val;
    
        public Lst(int v)
        {
            val= v;
            ptr= null;
        }
    }
    
  2. 複数の要素の並びを扱うデータ構造として配列があります。
    しかし、配列には次のような欠点があります。
    これらの欠点を一挙に解決してくれるのが List 構造です。
  3. List 構造とはセルをポインタで連鎖したデータ構造です。
    セルは次のセルに連鎖するためのポインタとデータ領域で構成されます。
    最も単純なセルは次のようになります。
    ポインタ データ
  4. セルをポインタで連鎖した List 構造の概念図です。
    次のセル データ1
        ↓
    次のセル データ2
        ↓
        ・・・
    次のセル データn-1
        ↓
    null データn
  5. 手始めに3個のセルに「1,2,3」の値を格納して連鎖してみました。
    1番目のセルの ptr には2番目のセルが、2番目のセルの ptr には3番目のセルが連鎖されていることに注目して下さい。
    3番目のセルの ptr には List の終端を示す null が格納されています。

ループで連鎖する

  1. ループで連鎖するプログラムです。
    私が List 構造のプログラムを習い始めた頃は参考書もほとんど無く、もちろんインターネットも存在しませんでした。
    試行錯誤しながら、私が考えた最もスマートだと思える List 構造を構築するロジックです。
    どのように連鎖されて行くのかを、良く理解して下さい。
    /*****************************/
    /*★ Data List     前田 稔 ★*/
    /*****************************/
    using System;
    
    class console
    {
        public static void Main()
        {   int i;
            Lst pt = null;
            Lst wk;
    
            for(i=1; i<6; i++)
            {   wk = new Lst(i);
                wk.ptr = pt;
                pt = wk;
            }
            for(; pt!=null; pt= pt.ptr)
                Console.WriteLine("Lst.val= {0}",pt.val);
            System.Console.ReadLine();
        }
    }
    
    class Lst
    {
        public  Lst ptr;
        public  int val;
    
        public Lst(int v)
        {
            val= v;
            ptr= null;
        }
    }
    
  2. class Lst では、次のセルに連鎖するポインター領域(ptr)と、セルに保存するデータ領域(val)を定義しています。
    Constructor では val に v を格納して、ptr を null に設定します。
    class Lst
    {
        public  Lst ptr;
        public  int val;
    
        public Lst(int v)
        {
            val= v;
            ptr= null;
        }
    }
    
  3. pt が List を連鎖する親のポインターで、wk は作業用のポインターです。
        public static void Main()
        {   int i;
            Lst pt = null;
            Lst wk;
    
  4. セルを連鎖して List を構築するソースコードです。
    new Lst(i) でセルを生成して wk に格納します。
    wk.ptr に pt を格納して、pt に wk を格納します。
    これで pt を親としてセルが次々と連鎖されるのを解っていただけるでしょうか。
    これが私が考えた最もスマートだと思える連鎖の方法です。
            for(i=1; i<6; i++)
            {   wk = new Lst(i);
                wk.ptr = pt;
                pt = wk;
            }
    
  5. 連鎖された List を表示します。
    プログラムを実行すると表示される順序はどうなるでしょう。
            for(; pt!=null; pt= pt.ptr)
                Console.WriteLine("Lst.val= {0}",pt.val);
    
  6. C# では List 構造を持つデータ形式として ArrayList が提供されています。
    詳細は ArrayList の基礎 を参照して下さい。

超初心者のプログラム入門(C# Frame Work)