using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace 泛型
{
//簡單鏈表的實現,單向(泛型)
class 泛型類
{
public static void Main()
{
LinkedList<string> list = new LinkedList<string>();
list.AddLast("500");
list.AddLast("400");
list.AddLast("300");
list.AddLast("200");
//使用泛型版的IEnumerable時,foreach也是類型安全的,些時不可能寫 string之外的類型
foreach (string i in list)
{
Console.WriteLine(i);
}
Console.ReadLine();
}
}
////泛型類的定義與一般類相似,只要使用泛型類型聲明,之後,這個類型就可以做為一個字段成員,或者參數類型。
class LinkedListNode<T>
{
//項目值
private T value;
private LinkedListNode<T> next;
private LinkedListNode<T> prev;
public LinkedListNode(T value)
{
this.value = value;
}
public T Value
{
//只讀屬性
get
{
return this.value;
}
}
//下一個
public LinkedListNode<T> Next
{
get { return next; }
set { next = value; }
}
//上一個
public LinkedListNode<T> Prev
{
get { return prev; }
set { prev = value; }
}
}
class LinkedList<T> : IEnumerable<T>
{
//第一個
private LinkedListNode<T> first;
internal LinkedListNode<T> First
{
get { return first; }
set { first = value; }
}
//最後一個
private LinkedListNode<T> last;
internal LinkedListNode<T> Last
{
get { return last; }
set { last = value; }
}
//從後面插入
public LinkedListNode<T> AddLast(T node)
{
LinkedListNode<T> newNode = new LinkedListNode<T>(node);
if (first == null)
{
//Last的引用一直要更新
first = newNode;
last = first;
}
else
{
//把當前最後一個節點的下一個節點的引用 指向新對象
last.Next = newNode;
//更新最後一個節點
last = newNode;
}
return newNode;
}
public IEnumerator<T> GetEnumerator()
{
LinkedListNode<T> current = first;
while (current != null)
{
yield return current.Value;
//新引用指向下一個節點的地址
current = current.Next;
&