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
}
}
}
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
}
}
}
相关文章推荐
- c#泛型学习(二)_C#教程
- c#泛型学习(二)
- C#泛型学习03--使用相应的泛型版本替换Stack和Queue
- Java泛型学习笔记--Java泛型和C#泛型比较学习(一)
- C#泛型学习(一)。
- c#泛型学习
- C#泛型(C#_编程指南)CSDN学习整理笔记
- Java泛型学习笔记--Java泛型和C#泛型比较学习(一)
- c#泛型学习(二)
- C#泛型学习
- C#泛型学习01--理解泛型
- C#泛型学习03--使用相应的泛型版本替换ArrayList
- C#泛型学习
- C#泛型的学习体会
- C#泛型学习笔记之一(约束)
- 一个简单的例子学习c#泛型
- C#泛型学习不可不看
- [置顶] C#泛型入门学习泛型类、泛型集合、泛型方法、泛型约束、泛型委托
- 黑马程序员_学习C#泛型_自己的泛型Stack类
- C#泛型学习