简单数据结构类——Stack

102 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

Stack(栈)是一个C#为我们封装更好的类。它的本质是object[]数组,只是封装了特殊的存储规则。

Stack是栈存储容器,栈是一种先进后出的数据结构,即先存入的数据后获取,后存入的数据先获取。当我们需要对各项进行后进先出的访问时,可以使用堆栈。当我们在列表中添加一项,称为推入元素;当我们从列表中移除一项时,称为弹出元素。

那么我们改如何申明Stack呢,我们可以使用以下代码来申明:

Stack stack= new Stack();//Stack在System.Collections命名空间下定义;因此,在程序中使用Stack时,必须添加System.Collections命名空间

下面列举一些Stack类常用的方法:

Count 获取栈(stack)中的元素个数

public virtual void Clear();//从 Stack 中移除所有的元素。

public virtual bool Contains( object obj );//判断某个元素是否在 Stack 中。

public virtual object Peek();//返回在 Stack 的顶部的对象,但不移除它。

public virtual object Pop();//移除并返回在 Stack 的顶部的对象。

public virtual void Push( object obj );//向 Stack 的顶部添加一个对象。

public virtual object[] ToArray();//复制 Stack 到一个新的数组中。

需要注意的是,栈的增删查改有些不同:栈中增加数据我们可以称之为压栈;而栈中不存在删除的概念,只有取的概念,即弹栈;栈无法查看指定位置的数据,只能查看栈顶的内容,即最后一个进入数组的数据,但是我们可以查看数据是否存在于栈中;栈无法改变其中的元素,只能压栈和弹栈,如果非要改栈中的内容,我们只能选择清空栈的内容。

遍历

长度

Console.WriteLine(stack.Count;

用foreach遍历,但是遍历出来的顺序是从栈顶到栈底

foreach(object item in stack)

{

Console.WriteLine(item);

}

第三种遍历方法是将栈转换为object数组,遍历出来的顺序同样是从栈顶到栈底

object[] array = stack.ToArray();

for(int i =0;i<array.Length;i++)

{

Console.WriteLine(array[i]);

}

循环弹栈

while(stack.Count>0)

{

Object o=stack.Pop();

Console.WriteLine(o);

}

Console.WriteLine(stack.Count);

由于Stack用万物之父来存储数据,所以存在装箱拆箱的概念。当我们往其中进行值类型存储时,就是在装箱;当我们将值类型对象取出来转换使用时,就是在拆箱。