您的位置:首页 > 编程语言 > C#

C# 简单链表的实现下(使用泛型)

2010-01-31 19:33 776 查看
/// <summary>
/// 元素类
/// </summary>
class LinkedListNode<T>
{
private T value;

public LinkedListNode(T value)
{
this.value = value;
}

//当前元素
public T Value
{
get { return value; }
}

//定义了下一个元素
private LinkedListNode<T> next;
public LinkedListNode<T> Next
{
get { return next; }
internal set { next = value; }
}

//定义了前一个元素
private LinkedListNode<T> prev;
public LinkedListNode<T> Prev
{
get { return prev; }
internal set { prev = value; }
}

//※internal定义了只有在同一程序集的文件中,Next才是可以被设置的
}

/// <summary>
/// 链表类
/// 实现IEnumerable接口,以实现对链表的迭代
/// </summary>
class LinkedList<T> : IEnumerable
{
//链表的头
private LinkedListNode<T> first;
public LinkedListNode<T> First
{
get { return first; }
}

//链表的结尾
private LinkedListNode<T> last;
public LinkedListNode<T> Last
{
get { return last; }
}

//AddLast方法在链表结尾添加一个元素,
//如果该链表为空,就将该元素设置为链表的开始和结尾
public LinkedListNode<T> AddLast(T node)
{
LinkedListNode<T> newNode = new LinkedListNode<T>(node);
if (first == null)
{
first = newNode;
last = first;
}
else
{
last.Next = newNode;
last = newNode;
}
return newNode;
}

//实现接口IEnumerator的GetEnumerator方法
//通过包含yeild语句的迭代块,来实现对链表的迭代(foreach的实现)
public IEnumerator<T> GetEnumerator()
{
LinkedListNode<T> current = first;
while (current != null)
{
yield return current.Value;
current = current.Next;
}
}

//IEnumerator泛型接口的实现方式
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}

class Program
{
static void Main(string[] args)
{
LinkedList<int> lst = new LinkedList<int>();
lst.AddLast("c"); //应为是用了泛型,编译时会检验出该错误
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐