以下定义的是一个链表结点类型:
1 internal sealed class Node<T> 2 { 3 public T m_data; 4 public Node<T> m_next; 5 6 public Node(T data) 7 : this(data, null) 8 { } 9 10 public Node(T data, Node<T> next) 11 { 12 m_data = data; 13 m_next = next; 14 } 15 16 public override string ToString() 17 { 18 return m_data.ToString() + 19 (null != m_next ? m_next.ToString() : String.Empty); 20 } 21 }
使用方式:
1 Node<Char> head = new Node<Char>('C'); 2 head = new Node<Char>('B', head); 3 head = new Node<Char>('A', head); 4 Console.WriteLine(head.ToString());
运行结果:
以上实现的链表只能存放相同的数据类型,当然了,可以将类型实参设为 Object 继而在链表中存放不同的数据类型,但是这样的话会存在装箱和拆箱操作,数据量太大的话会影响性能。
利用泛型的继承关系可以实现在同一个链表中存放不同的数据类型,并且不存在装箱拆箱的操作。实现代码如下:
1 internal class Node 2 { 3 protected Node m_next; 4 5 public Node(Node next) 6 { 7 m_next = next; 8 } 9 } 10 11 internal class TypeNode<T> : Node 12 { 13 public T m_data; 14 15 public TypeNode(T data) 16 : this(data, null) 17 { 18 19 } 20 21 public TypeNode(T data, Node next) 22 : base(next) 23 { 24 m_data = data; 25 } 26 27 public override string ToString() 28 { 29 return m_data.ToString() + 30 (null != m_next ? m_next.ToString() : String.Empty); 31 } 32 }
使用方式:
1 Node head = new TypeNode<char>('.'); 2 head = new TypeNode<DateTime>(DateTime.Now, head); 3 head = new TypeNode<String>("Today is ", head); 4 Console.WriteLine(head.ToString());
运行结果: