栈的定义:栈(Stack)是一个后进先出(Last In First Out)的线性表,只允许在表尾进行删除和插入操作。
注:表尾称之为栈顶,表头称之为栈底。
栈的常用操作:
1、插入操作(Push):也称为进栈、压栈、入栈。类似把子弹压入弹夹的操作。
2、删除操作(Pop):也称为出栈、弹栈。类似射出子弹时子弹在弹夹中的操作。
3、取栈长度(Get Length):得到栈中的元素数量。
4、取栈大小(Get Size):得到栈的大小,即所能存储的最大元素数量。
5、清空栈(Clear):把栈的所有元素清空,但是不删除栈,也不清空其空间大小。
6、取栈顶元素(Peek):类似于Pop,返回栈顶元素,但不删除。
7、初始化(Init):给栈重新分配空间大小,把栈的所有数据清空。
以下为实现代码:
public class MyStack<T>
{
private int top { set; get; }
private int size { set; get; }
private T[] data { set; get; }
private int Top
{
set { this.top = value; }
get { return this.top; }
}
private int Size
{
set { this.size = value; }
get { return this.size; }
}
private T[] Data
{
set { this.data = value; }
get { return this.data; }
}
/// <summary>
/// 栈的默认大小为100
/// </summary>
public MyStack()
{
Top = 0;
Size = 100;
Data = new T[100];
}
/// <summary>
/// 创建指定大小的栈
/// </summary>
/// <param name="size"></param>
public MyStack(int size)
{
Top = 0;
Size = size;
Data = new T[size];
}
/// <summary>
/// 检验栈是否为空
/// </summary>
/// <returns></returns>
public bool IsEmpty()
{
return top == 0;
}
/// <summary>
/// 检验栈是否存满
/// </summary>
/// <returns></returns>
public bool IsFull()
{
return top == size;
}
/// <summary>
/// 入栈
/// </summary>
/// <param name="value"></param>
public void Push(T value)
{
if (IsFull())
return;
this.data[Top] = value;
top++;
}
/// <summary>
/// 出栈
/// </summary>
/// <returns></returns>
public T Pop()
{
T temp = default(T);
if (IsEmpty())
return temp;
this.Top--;
temp = this.data[Top];
return temp;
}
public T Peek()
{
return this.Data[Top - 1];
}
/// <summary>
/// 得到指定位置的栈元素
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public T this[int index]
{
set { this.Data[index] = value; }
get { return this.Data[index]; }
}
/// <summary>
/// 得到当前栈的长度
/// </summary>
/// <returns></returns>
public int GetLength()
{
return Top;
}
/// <summary>
/// 得到栈的空间大小
/// </summary>
/// <returns></returns>
public int GetSize()
{
return Size;
}
/// <summary>
/// 清空栈的所有元素
/// 栈中的所有元素作废,但是其空间不发生变化!
/// </summary>
public void Clear()
{
Data = new T[Size];
Top = 0;
}
/// <summary>
/// 销毁一个栈
/// 释放掉该栈所占据的所有物理内存空间!
/// </summary>
public void Destroy()
{
Top = 0;
Size = 0;
Data = null;
}
}