C#数据结构——堆栈的实现
堆栈的简单说明:
栈是一种重要的数据结构。从数据结构的角度看,栈也是线性表,其特殊性在于栈的基本操作是线性表操作的子集,它们是操作受限的线性表,因此可以称为限定性的数据结构。本实例用C#实现了栈的数据结构,并编译为类库供大家以后使用。
关键技术
栈是限定仅在表尾进行插入或删除操作的线性表。因此对栈来说,表尾端有其特殊含义,称为“栈顶(top)”,相应地,表头端称为“栈底(bottom)”,不含元素的空表称为空栈。栈的修改是按照后进先出的原则进行的。因此栈又称为后进先出的(last in first out)的线性表,在实现栈的数据结构时一定要注意这个特点。栈的基本操作除了在栈顶进行插入或删除外,还有栈的初始化,判断是否为空以及取栈顶元素等。
设计过程
(1)打开Visual Studio 开发环境,新建一个类库项目,命名为StackApply。
(2)将“Class1.cs”文件重命名为“CStack.cs”。
(3)程序主要代码如下:
public class CStack
{
private Clist m_List; //调用链表类
public CStack()
{
m_List = new Clist(); //构造函数
}
/// <summary>
/// 压入堆栈
/// </summary>
public void Push(int PushValue)
{
m_List.Append(PushValue); //参数:int PushValue压入堆栈的数据
}
/// <summary>
/// 弹出堆栈数据,如果为空,则取得 2147483647 为 int 的最大值
/// </summary>
public int Pop()
{
int PopValue; //功能:弹出堆栈数据
if (!IsNullStack()) //不为空堆栈
{
MoveTop(); //移动到顶
PopValue = GetCurrentValue(); //取得弹出的数据
Delete(); //删除
return PopValue;
}
return 2147483647; //空的时候为int类型的最大值
}
/// <summary>
/// 判断是否为空的堆栈
/// </summary>
public bool IsNullStack()
{
if (m_List.IsNull())
return true;
return false;
}
/// <summary>
/// 堆栈的个数
/// </summary>
public int StackListCount
{
get
{
return m_List.ListCount;
}
}
/// <summary>
/// 移动到堆栈的底部
/// </summary>
public void MoveBottom()
{
m_List.MoveFrist();
}
/// <summary>
/// 移动到堆栈的顶部
/// </summary>
public void MoveTop()
{
m_List.MoveLast();
}
/// <summary>
/// 向上移动
/// </summary>
public void MoveUp()
{
m_List.MoveNext();
}
/// <summary>
/// 向上移动
/// </summary>
public void MoveDown()
{
m_List.MovePrevious();
}
/// <summary>
/// 取得当前的值
/// </summary>
public int GetCurrentValue()
{
return m_List.GetCurrentValue();
}
/// <summary>
/// 删除取得当前的结点
/// </summary>
public void Delete()
{
m_List.Delete();
}
/// <summary>
/// 清空堆栈
/// </summary>
public void Clear()
{
m_List.Clear();
}
}
技巧与心得
C#中的堆栈类——Stack类。C#中提供了堆栈类,用Stack类来表示,该类表示对象的简单的后进先出非泛型集合,其位于System.Collections命名空间下。