手动实现枚举器、泛型集合、单链表
2011-12-07 17:18 音乐让我说 阅读(446) 评论(0) 收藏 举报废话不多说,直接贴代码:
MyCustomerList.cs
    public class MyCustomerList<T> : IEnumerable<T>
    {
        private class Node
        {
            public Node(T data)
            {
                _data = data;
                _next = null;
            }
            private T _data;
            public T Data
            {
                get
                {
                    return _data;
                }
                set
                {
                    _data = value;
                }
            }
            private Node _next;
            public Node Next
            {
                get
                {
                    return _next;
                }
                set
                {
                    _next = value;
                }
            }
        }
        private Node _head;
        public MyCustomerList()
        {
            _head = null;
        }
        /// <summary>
        /// 添加到集合的头部
        /// </summary>
        /// <param name="data"></param>
        public void AddToHead(T data)
        {
            Node current = new Node(data);
            current.Next = _head;
            _head = current;
        }
        /// <summary>
        /// 添加到集合的尾部
        /// </summary>
        /// <param name="data"></param>
        public void AddToLast(T data)
        {
            Node current = new Node(data);
            Node last = GetLastNode();
            if (last == null)
            {
                //集合中目前还没有元素
                _head = new Node(data);
            }
            else
            {
                last.Next = current;
            }
            
        }
        private Node GetLastNode()
        {
            Node last = _head;
            while(last != null && last.Next != null)
            {
                last = last.Next;
            }
            return last;
        }
        public IEnumerator<T> GetEnumerator()
        {
            Node current = _head;
            while(current != null)
            {
                yield return current.Data;
                current = current.Next;
            }
        }
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }
Program.cs
    public class Program
    {
        static void Main(string[] args)
        {
            MyCustomerList<int> myList = new MyCustomerList<int>();
            myList.AddToLast(10);
            myList.AddToLast(20);
            myList.AddToLast(30);
            myList.AddToLast(40);
            Show(myList);
            myList.AddToHead(5);
            myList.AddToHead(3);
            Show(myList);
            MyCustomerList<Teacher> teachers = new MyCustomerList<Teacher>();
            teachers.AddToLast(new Teacher() { Name = "张三", Age = 26, Birthday = new DateTime(1985,8,7) });
            teachers.AddToLast(null);
            teachers.AddToLast(new Teacher() { Name = "李四", Age = 27, Birthday = new DateTime(1984, 8, 7) });
            teachers.AddToLast(new Teacher());
            Show(teachers);
            Console.ReadLine();
        }
        static void Show<T>(MyCustomerList<T> myList)
        {
            Console.WriteLine("\n准备遍历集合中的内容:");
            foreach (var item in myList)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("遍历结束\n");
        }
    }
    public class Teacher
    {
        public Teacher()
        {
        }
        public Teacher(string name, int age, DateTime birthday)
        {
            this.Name = name;
            this.Age = age;
            this.Birthday = birthday;
        }
        public string Name { get; set; }
        public int Age { get; set; }
        public DateTime Birthday { get; set; }
        public override string ToString()
        {
            return string.Format("大家好,我叫 {0}, 今年 {1} 岁,出生日期:{2}",Name,Age,Birthday);
        }
    }
运行截图:

谢谢浏览!
    作者:音乐让我说(音乐让我说 - 博客园)
    
    出处:http://music.cnblogs.com/
    文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号