c# 泛型学习(二)

纵然是瞬间 提交于 2020-03-17 08:30:43

 使用泛型实现简单链表

 

首先创建一个泛型类LinkedListNode,该类型包含了一个属性Value,可以通过初始化进行赋值。还包含对上一个元素和下一个元素的引用。

  

    public class LinkedListNode<T>
        {
            public LinkedListNode(T value)
            {
                this.value = value;
            }
            public T value { get; private set; }

            public LinkedListNode<T> Next { get; internal set; }
            public LinkedListNode<T> Prev { get; internal set; }
        }

 

然后创建一个LinkedList类型,该类包含了对链表首尾元素的引用。还包含一个添加元素到尾部的方法,以及GetEnumrator()方法,以便通过foreach进行遍历元素。

        public class LinkedList<T> : IEnumerable<T>

          {
 
            public LinkedListNode<T> First { get; private set; }
                 public LinkedListNode<T> Last { get; private set; }
 

            public LinkedListNode<T> AddLast(T node)

            {

                var newNode = new LinkedListNode<T>(node);

 

                if (First == null)
                {
                    First = newNode;

                    Last = First;
                }
                else
                {
                    LinkedListNode<T> previous = Last;

                    Last.Next = newNode;

                    Last = newNode;

                    Last.Prev = previous;

                }

                return newNode;
            }

 

 

 

            public IEnumerator<T> GetEnumerator()
            {

                LinkedListNode<T> current = First;

                while (current != null)

                {

                    yield return current.value;

                    current = current.Next;
                }
            }
 
            IEnumerator IEnumerable.GetEnumerator()
            {

                return GetEnumerator();
            }

        }

 

 

现在就可以对任意数据类型使用这个简易链表进行操作了。

 

 static void Main(string[] args)

        {

            LinkedList<int> arr = new LinkedList<int>();

            arr.AddLast(0);

            arr.AddLast(1);

            arr.AddLast(2);

            foreach (var item in arr)

            {

                Console.WriteLine(item);

            }

 

            LinkedList<string> sArr = new LinkedList<string>();

            sArr.AddLast("hello 1");

            sArr.AddLast("hello 2");

            sArr.AddLast("hello 3");

 

            foreach (var item in sArr)

            {

                Console.WriteLine(item);

            }

            Console.ReadKey();

        }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!