C#数据结构-双向链表

链表的概念以及链表与数组的差异不做过多的叙述,相信大家都耳熟能详,这里以c#语言实现简单的双向链表,作为备用,记录下~

 

 

 

    public class Node<T>
    {
        private Node<T> prev;

         next;

        private T val;

        public Node<T> Prev { get { return prev; } set { prev = value; } }

        public Node<T> Next { return next; } set { next =public T Data { return val; } set { val =public Node(T item)
        {
            val = item;
        }
    }
class Link<T>
{
        public Node<T> head { get; set; }

        int count {  Link()
        {
            Node<T> node = new Node<T>(default(T));
            node.Next = node;
            node.Prev = node;
            head = node;
            count++;
        }

        public Node<T> Append(T node)
        {
            Node<T> newNode = new Node<T>(node);
            newNode.Prev = head.Prev;
            newNode.Next = head;
            head.Prev.Next = newNode;
            head.Prev = newNode;
            count++;
            return newNode;
        }

        public Node<T> Insert(int index,T node)
        {
            if (index < 0 || index > count)
                throw new IndexOutOfRangeException("索引超出界限");
            if (index == 0)
                 Append(node);
            else
            {
                Node<T> bnode = Get(index);
                Node<T> newNode = (node);
                bnode.Prev.Next = newNode;
                newNode.Prev = bnode.Prev;
                newNode.Next = bnode;
                bnode.Prev = newNode;
                count++;
                 newNode;
            }
        }

        void Delete( index)
        {
            );
            Node<T> node = Get(index);
            node.Prev.Next = node.Next;
            node.Next.Prev = node.Prev;
            count--void showAll()
        {
            for (int i = 0; i < count; i++)
            {
                Console.WriteLine($index:{i},content:{Get(i).Data});
            }
        }


        public Node<T> Get(0 || index >=);

            //如果要找的节点在前半部分,则顺序查找,
            if (index < count / 2)
            {
                var node = head.Next;
                0; i < index; i++)
                    node = node.Next;
                 node;
            }
            否则逆序查找
            var preNode = head.Prev;
            0; i < count-1-index; i++)
                preNode = preNode.Prev;
             preNode;
        }
        /// <summary>
        /// 获取最后一条
        </summary>
        <returns></returns>
         GetLast()
        {
            return Get(count - 1);
        }

         GetFirst()
        {
            return Get();
        }
    }            

测试:

    class Program
    {
        static void Main(string[] args)
        {
            Link<string> dlink = new Link<string>();
            dlink.Append(我是第一位);
            dlink.Append(我是第二位我是第三位);
            dlink.Insert(2,我是第四位,我占用了第二的位置我是第五位我是第六位我是第七位我是第八位我是第九位);
            dlink.Delete(7);

            dlink.showAll();

            Console.ReadLine();
        }
    }

打印输出结果:

 

 

 

 

 

欢迎一起学习交流

 

 

相关文章

项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件...
简介 本文的初衷是希望帮助那些有其它平台视觉算法开发经验的...
这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期...
在C#中的使用JSON序列化及反序列化时,推荐使用Json.NET——...
事件总线是对发布-订阅模式的一种实现,是一种集中式事件处理...
通用翻译API的HTTPS 地址为https://fanyi-api.baidu.com/api...