C# : 泛型的继承关系实现的一个可以存放不同数据类型的链表

以下定义的是一个链表结点类型:

 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());

运行结果:

转载于:https://www.cnblogs.com/luguoshuai/p/10293387.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值