1. 程式人生 > >C#資料結構之單鏈表(LinkList)例項詳解

C#資料結構之單鏈表(LinkList)例項詳解

本文例項講述了C#資料結構之單鏈表(LinkList)實現方法。分享給大家供大家參考,具體如下:

這裡我們來看下“單鏈表(LinkList)”。在上一篇《C#資料結構之順序表(SeqList)例項詳》的最後,我們指出了:順序表要求開闢一組連續的記憶體空間,而且插入/刪除元素時,為了保證元素的順序性,必須對後面的元素進行移動。如果你的應用中需要頻繁對元素進行插入/刪除,那麼開銷會很大。

而連結串列結構正好相反,先來看下結構:

每個元素至少具有二個屬性:data和next。data用來存放資料,而next用來指出它後面的元素是誰(有點“指標”的意思)。

連結串列中的元素,通常也稱為節點Node,下面是泛型版本的Node.cs

namespace 線性表
{
  public class Node<T>
  {
    private T data;
    private Node<T> next;
    public Node(T val, Node<T> p) 
    {
      data = val;
      next = p;
    }
    public Node(Node<T> p) 
    {
      next = p;
    }
    public Node(T val) 
    {
      data = val;
      next = null;
    }
    public Node() 
    {
      data = default(T);
      next = null;
    }
    public T Data 
    {
      get { return data; }
      set { data = value; }
    }
    public Node<T> Next 
    {
      get { return next; }
      set { next = value; }
    }
  }
}

連結串列在儲存上並不要求所有元素按順序儲存,因為用節點的next就能找到下一個節點,這好象一根“用珠子串成的鏈子”,要找到其中的某一顆珠子,只要從第一顆節點(通常稱為Head節點)開始,不斷根據next指向找到下一個,直到找到需要的節點為止。

連結串列中需要有一個Head節點做為開始,這跟順序表有所不同,下面是單鏈表的實現:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166