简介:
堆栈(Stack)代表了一个后进先出的对象集合。当您需要对各项进行后进先出的访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。
栈的特点:
1、后进先出(LIFO)的一种数据结构 2、随着向栈中添加元素,栈空间会根据内容重新分配空间 3、栈中允许存放null作为有效值,并且允许存放重复值
Stack 类提供了 3 种构造方法,如下表所示。
构造方法 | 作用 |
---|---|
Stack() | 使用初始容量创建 Stack 的对象 |
Stack(ICollection col) | 创建 Stack 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素个数、增长因子相同 |
Stack(int capacity) | 创建 Stack 的实例,并设置其初始容量 |
实例:
1,创建与初始化
Stack sta = new Stack();
2,入栈,将元素插入到栈集合中(插入到栈顶)
sta.Push("挖个坑");
sta.Push("埋点土");
sta.Push("根");
sta.Push("茎");
sta.Push("叶");
3,出栈,将栈顶的元素返回并移除
Console.WriteLine(sta.Pop());
4,出栈,将栈顶的元素返回,但不移除
Console.WriteLine(sta.Peek());
5,清除栈中所有元素
sta.Clear();
6,获取栈中元素个数
Console.WriteLine(sta.Count);
7,将栈中的所有元素转存到某个数组里
object[] objArr = sta.ToArray();
Console.WriteLine("---------------");
foreach (var item in sta)
{
Console.WriteLine(item);
}
下面通过实例来演示 Stack 类的使用。。
using System;
using System.Collections;
namespace CollectionsApplication
{
class Program
{
static void Main(string[] args)
{
Stack st = new Stack();
st.Push('A');
st.Push('M');
st.Push('G');
st.Push('W');
Console.WriteLine("Current stack: ");
foreach (char c in st)
{
Console.Write(c + " ");
}
Console.WriteLine();
st.Push('V');
st.Push('H');
Console.WriteLine("The next poppable value in stack: {0}",
st.Peek());
Console.WriteLine("Current stack: ");
foreach (char c in st)
{
Console.Write(c + " ");
}
Console.WriteLine();
Console.WriteLine("Removing values ");
st.Pop();
st.Pop();
st.Pop();
Console.WriteLine("Current stack: ");
foreach (char c in st)
{
Console.Write(c + " ");
}
}
}
}
结果如下:
Current stack: W G M A The next poppable value in stack: H Current stack: H V W G M A Removing values Current stack: G M A
从上面的执行效果可以看出,通过 Stack 类提供的 Pop 方法可以依次从栈顶取出栈中的每一个元素。
总结:
Stack 类中的常用属性和方法如下表所示。
属性或方法 | 作用 |
---|---|
Push(object obj) | 向栈中添加元素,也称入栈 |
object Peek() | 用于获取栈顶元素的值,但不移除栈顶元素的值 |
object Pop() | 用于移除栈顶元素的值,并移除栈顶元素 |
Clear() | 从 Stack 中移除所有的元素 |
Contains(object obj) | 判断某个元素是否在 Stack 中 |
object[] ToArray() | 复制 Stack 到一个新的数组中 |