您的位置:首页 > 编程语言 > C#

C#泛型学习

2014-11-10 20:30 113 查看
题目:

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

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: