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

    运行结果:

  • 相关阅读:
    文件加密二进制版本
    文件复制二进制版
    C语言里的文件函数
    文件加密2——基础版(限文本)
    文件加密——可执行,较复杂的抽取(限文本)
    typedef的使用3——使用经过typedef定义的函数构成的函数数组
    typedef的使用2——定义函数
    typedef的使用1——引入
    C语言枚举
    HanLP极致简繁转换详细讲解
  • 原文地址:https://www.cnblogs.com/luguoshuai/p/10293387.html
Copyright © 2020-2023  润新知