zoukankan      html  css  js  c++  java
  • 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());

    运行结果:

  • 相关阅读:
    CSS选择器
    基础DOS命令
    超链接a标签
    vscode使用技巧
    pc端页面添加meta标签:X-UA-Compatible meta标签
    提问的智慧
    Zepto核心模块源代码分析
    远程调试工具weinre使用教程
    HTML标签marquee实现滚动效果
    git 学习教程
  • 原文地址:https://www.cnblogs.com/luguoshuai/p/10293387.html
Copyright © 2011-2022 走看看