当前位置: 编程技术>.net/c#/asp.net
c# 自定义泛型链表类的详解
来源: 互联网 发布时间:2014-10-21
本文导语: (1)自定义泛型链表类。 代码如下:public class GenericList { private class Node { //当前节点值 private T data; public T Data { ...
(1)自定义泛型链表类。
public class GenericList
{
private class Node
{
//当前节点值
private T data;
public T Data
{
get { return data; }
set { data = value; }
}
//节点的下一个节点
private Node next;
public Node Next
{
get { return next; }
set { next = value; }
}
//节点的上一个节点
private Node last;
public Node Last
{
get { return last; }
set { last = value; }
}
public Node(T t)
{
data = t;
next = null;
}
}
private Node firstNode;
private Node lastNode;
public void AddNode(T t)
{
Node node = new Node(t);
node.Last = lastNode;
if (lastNode != null)
lastNode.Next = node;
lastNode = node;
if (firstNode == null)
{
firstNode = node;
}
}
//要在自定义泛型集合上迭代
//必须实现该接口
public IEnumerator GetEnumerator()
{
Node current = firstNode;
while (current != null)
{
//yield return表达式以枚举对象返回
yield return current.Data;
current = current.Next;
}
}
}
(2)自定义泛型链表类调用。
class GenericListTestTwo
{
static void Main()
{
// 类型参数为int
GenericList list = new GenericList();
for (int a = 0; a < 5; a++)
{
list.AddNode(a);
}
foreach (int i in list)
{
System.Console.WriteLine(i);
}
//类型参数为string
GenericList strList = new GenericList();
strList.AddNode("First Node");
strList.AddNode("Second Node");
foreach(string s in strList)
{
System.Console.WriteLine(s);
}
Console.Read();
}
}
输出如下:
代码如下:
public class GenericList
{
private class Node
{
//当前节点值
private T data;
public T Data
{
get { return data; }
set { data = value; }
}
//节点的下一个节点
private Node next;
public Node Next
{
get { return next; }
set { next = value; }
}
//节点的上一个节点
private Node last;
public Node Last
{
get { return last; }
set { last = value; }
}
public Node(T t)
{
data = t;
next = null;
}
}
private Node firstNode;
private Node lastNode;
public void AddNode(T t)
{
Node node = new Node(t);
node.Last = lastNode;
if (lastNode != null)
lastNode.Next = node;
lastNode = node;
if (firstNode == null)
{
firstNode = node;
}
}
//要在自定义泛型集合上迭代
//必须实现该接口
public IEnumerator GetEnumerator()
{
Node current = firstNode;
while (current != null)
{
//yield return表达式以枚举对象返回
yield return current.Data;
current = current.Next;
}
}
}
(2)自定义泛型链表类调用。
代码如下:
class GenericListTestTwo
{
static void Main()
{
// 类型参数为int
GenericList list = new GenericList();
for (int a = 0; a < 5; a++)
{
list.AddNode(a);
}
foreach (int i in list)
{
System.Console.WriteLine(i);
}
//类型参数为string
GenericList strList = new GenericList();
strList.AddNode("First Node");
strList.AddNode("Second Node");
foreach(string s in strList)
{
System.Console.WriteLine(s);
}
Console.Read();
}
}
输出如下: