C#泛型学习

题目:

 1.       设计泛型接口IStack<T>,接口中包含 Push、Pop、Peek、Empty(清空)、Count等方法及属性

2.       通过实现IStack<T>接口来设计一个泛型栈MyStack<T>,使用List<T>做为内部容器,后进先出,符合栈的特性,同时注意边界处理

3.       重写ToString 方法,合理输出栈内的内容。

例如:栈内有A,B,C三个元素,则返回一个

C

B

A

的字符串

4.       添加MyStack 对Foreach 遍历的支持。(实现IEumerable 和 IEumerator) 

5.       合理的代码演示MyStack的功能。

6.       良好的编码风格和适当的注释

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;


namespace DesignMyStack
{
    class Program
    {
        static void Main(string[] args)
        {
            MyStack<char> sta=new MyStack<char>();
            //演示Push方法
            Console.WriteLine("演示Push()方法:");
            sta.Push('A');
            sta.Push('B');
            sta.Push('C');
            sta.Push('D');
            sta.Push('E');
            sta.Push('F');
            //演示对Foreach的支持
            Console.WriteLine("演示Foreach()方法:");
            foreach (char c in sta)
            {
                Console.WriteLine(c);
            }
            //演示Pop方法
            Console.WriteLine("演示Pop()方法:");
            sta.Pop();
            sta.Pop();
            //演示Peek方法
            Console.WriteLine("演示Peek()方法:");
            sta.Peek();
            //演示Count的用法
            Console.WriteLine("演示Count的用法:");
            Console.WriteLine("MyStack have {0} character",sta.Count);
            //演示重写过的ToString()
            Console.WriteLine("演示重写过的ToSring():");
            Console.WriteLine(sta.ToString());
            //演示Empty的用法
            Console.WriteLine("演示Empty的用法:");
            sta.Empty();
            Console.WriteLine("After Empty() MyStack have {0} character", sta.Count);
            Console.WriteLine("调用过Empty()后使用Pop()的结果:");
            sta.Pop();
            Console.WriteLine("调用过Empty()后使用Peek()的结果:");
            sta.Peek();
            Console.ReadKey();
        }
        #region  The  generic interface IStack<T>
        interface IStack<T>
        {
            void Push(T item);
            void Pop();
            void Peek();
            void Empty();
            int Count { get; }
        }
        #endregion
         // Design MyStack<T>
         public class MyStack<T> : IStack<T>, IEnumerable, IEnumerator
        {
            int pi = -1;//索引,只在支持foreach时使用
            private int index;//List<T>的索引
            List<T> myList;
            public MyStack()
            {
                index = -1;  
                myList = new List<T>();
            }
            #region 实现List<T>接口
             //Count
            public int Count
            {
                get { return myList.Count; }
            }
            //Push()
            public void Push(T item)
            {
                myList.Add(item);
                index++;
                Console.WriteLine("Push {0} into MyStack:", myList[index]);
            }
             //Pop()
            public void Pop()
            {
                try
                {
                    Console.WriteLine("Pop {0} out!",myList[index]);
                    myList.RemoveAt(index);
                    index--;
                }
                catch (Exception) { Console.WriteLine("MyStack is  Empty!"); }
            }
             //Peek()
            public void Peek()
            {
                try { Console.WriteLine(myList[index]); }
                catch (Exception) { Console.WriteLine("MyStack is Empty!"); }
            }
             //Empty
            public void Empty()
            {
                Console.WriteLine("Call Empty() ");
                myList.Clear();
                index = -1;
            }
            #endregion
            #region 支持foreach
            public IEnumerator GetEnumerator()
            {
                return this;
            }
            public object Current
            {
                
                get { return myList[pi]; }
            }
            public bool MoveNext()
            {
                if (pi >=myList.Count-1)
                {
                    this.Reset();
                    return false;
                }
                pi++;
                return true;
            }
            public void Reset()
            {
                pi = -1;
            }
            #endregion
            #region 重写ToString()
            public override string ToString()
            {
                string str = Environment.NewLine;
                string temp ="";
                foreach (object t in myList)
                {
                    temp = t + str + temp;
                }
                return temp;
            }


            #endregion
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值