Unity学习之C#_线性表的实现——双链表

本文介绍了如何用C#实现双链表,对比单链表,双链表在读取和写入速度上有显著优势。通过增加前驱引用,双链表可以快速定位数据,提高操作效率。文章提供了代码实现,并展示了双链表在相同数据量下优于单链表的性能测试结果。
摘要由CSDN通过智能技术生成

之前的两篇文章分别用顺序表和单链表来实现线性表。今天要介绍的是双链表,原理和单链表相同区别在于双链表有两个引用分别指向上一个数据和下一个数据,这里画一个图简单看一下

双链类的示意图,相对于单链多了一个引用,指向上一个数据
在这里插入图片描述
这是双链数据的组成,他们是这样互相引用的
在这里插入图片描述

双链表相对于单链表的优劣:
  • 优势
    • 读取速度,单链表的读取每次都是从表头开始,或者从表尾开始,效率低,双链可以根据索引判断从表头或者表尾开始
    • 写入速度,对于后驱引用节点来说,每一次写入都需要遍历到表尾,效率太低,改成前驱引用节点会改善很多,但是读取速度还是没有改变,依然效率低下,但是双链表可以直接从表为写入,效率超高
  • 劣势
    • 其实我感觉双链是完爆单链的,除了双链的数据量会大一些,毕竟多储存了一个引用

上代码

第一步、定义一个接口
双链表也是线性表的实现之一,所有这个接口和上一篇单链的是一样的

//线性表接口定义:线性表的实现有 顺序表、单链表{双向链表、循环链表}
    interface IListDs<T>
    {
        int GetLength();//求长度
        void Clear();//清空操作
        bool IsEmpty();//判断线性表是否为空
        void Add(T item);//添加数据
        void Insert(T item, int index);//插入数据
        T Delete(int index);//删除数据
        T GetElement(int index);//取数据
        T this[int index] { get; }//索引器取数据
        int Locate(T value);//按照值查找数据
    }

第二部、定义存储数据的类
这个类和单链的类是几乎一样的,只是多了一个前引用而已

/// <summary>
    /// 双向链表的结点类
    /// </summary>
    /// <typeparam name="T"></typeparam>
    class DbNode<T>
    {
        private T data;//储存数据(数据域)
        private DbNode<T> prev;//前引用
        private DbNode<T> next;//后引用

        /// <summary>
        /// 构造方法,值和后引用
        /// </summary>
        /// <param name="value"></param>
        /// <param name="dbNode"></param>
        public DbNode(T value,DbNode<T> dbNode)
        {
            data = value;
            next = dbNode;
        }

        /// <summary>
        /// 构造方法,后引用
        /// </summary>
        /// <param name="dbNode"></param>
        public DbNode(DbNode<T> dbNode)
        {
            next = dbNode;
        }

        /// <summary>
        /// 构造方法,值
        /// </summary>
        /// <param name="value"></param>
        public DbNode(T value)
        {
            data = value;
            next = null;
        }

        /// <summary>
        /// 构造方法,默认
        /// </summary>
        public DbNode()
        {
            data = default(T);
            next = null;        
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值