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