微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

打印输出结果:

 

 

 

 

 

欢迎一起学习交流

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐