顺序栈:
1.接口类:
interface IStackDS<T>
{
/// <summary>
/// 获取元素个数
/// </summary>
int Count { get; }
/// <summary>
/// 获取栈中元素个数
/// </summary>
/// <returns></returns>
int GetLength();
/// <summary>
/// 栈是否为空
/// </summary>
/// <returns></returns>
bool IsEmpty();
/// <summary>
/// 清空栈
/// </summary>
void Clear();
/// <summary>
/// 入栈
/// </summary>
/// <param name="item">需要入栈的元素</param>
void Push(T item);
/// <summary>
/// 向栈中添加一个元素
/// </summary>
/// <param name="item"></param>
void Add(T item);
/// <summary>
/// 出栈
/// </summary>
/// <returns>出栈元素</returns>
T Pop();
/// <summary>
/// 获取栈顶元素
/// </summary>
/// <returns></returns>
T Peek();
}
2.实现类:
class SeqStack<T> : IStackDS<T>
{
private T[] data; //定义一个数组用来存放数据
private int top; //指向栈顶的指针
public SeqStack(int size) //构造函数初始化
{
data = new T[size];
top = -1;
}
public SeqStack() : this(10) //无参构造,栈中可容纳数据为十个
{
}
public int Count //获取栈中数据元素个数
{
get
{
return top+1;
}
}
public void Add(T item) //向顺序栈中添加元素
{
data[Count] = item; //向栈顶加入元素
top++; //将指向栈顶的指针移动一个位置
}
public void Clear() //清空顺序栈
{
top = -1; //修改指向栈顶的指针指向的位置
}
public int GetLength() //获取顺序栈中元素个数
{
return Count;
}
public bool IsEmpty() //判断顺序栈是否为空
{
return Count == 0;
}
public T Peek() //获取栈顶元素
{
return data[top];
}
public T Pop() //将栈顶元素出栈
{
T temp = data[top]; //定义一个变零,接收栈顶元素值
top--; //将栈顶指针移动一个位置
return temp; //返回栈顶元素值
}
public void Push(T item) //将参数item入栈
{
data[Count] = item;
top++;
}
}
3.测试类:
static void Main(string[] args)
{
IStackDS<string> list = new SeqStack<string>();
list.Add("1");
list.Add("2");
list.Add("3");
list.Add("4");
list.Add("5");
list.Add("6");
list.Add("7");
list.Add("8");
list.Add("9");
list.Add("10");
Console.WriteLine(list.GetLength());
Console.WriteLine("--------------");
while (list.Count>0)
{
Console.Write(list.Pop() + " ");
}
}