加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

C#数据结构-双向链表

发布时间:2021-05-21 07:26:00 所属栏目:大数据 来源: https://www.jb51.cc
导读:链表的概念以及链表与数组的差异不做过多的叙述,相信大家都耳熟能详,这里以c#语言实现简单的双向链表,作为备用,记录下~ ? ? ? public class NodeT { private NodeT prev; next; private T val; public NodeT Prev { get { return prev; } set { prev = v

链表的概念以及链表与数组的差异不做过多的叙述,相信大家都耳熟能详,这里以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();
        }
    }

打印输出结果:

?

?

?


?

?

欢迎一起学习交流

?

?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读