栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。
向一个栈插入新元素又称作进栈、入栈或压栈(push),它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
从一个栈删除元素又称作出栈或退栈(pop),它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
它这种存储方式被称为 LIFO (Last in first out)(后进先出,选进后出)
C# 包括泛型 Stack
您可以通过为 Stack
static void Main(string[] args)
{
var myStack = new Stack<int>();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
foreach (var item in myStack)
Console.Write(item + ","); //输出 4,3,2,1,
}
也可以通过数组来创建一个堆栈
static void Main(string[] args)
{
int[] arr = new int[] { 1, 2, 3, 4 };
Stack<int> myStack = new Stack<int>(arr);
foreach (var item in myStack)
Console.Write(item + ","); //输出 4,3,2,1,
}
下表列出了 Stack 类的一些常用的 属性:
属性 | 描述 |
---|---|
Count | 获取 Stack 中包含的元素个数。 |
下表列出了 Stack 类的一些常用的 方法:
方法名 | 描述 |
---|---|
void Clear() | 从 Stack 中移除所有的元素。 |
bool Contains(T item) | 判断某个元素是否在 Stack 中。 |
T Peek() | 返回在 Stack 的顶部的对象,但不移除它。 |
T Pop() | 移除并返回在 Stack 的顶部的对象。 |
void Push(T item) | 向 Stack 的顶部添加一个对象。 |
T[] ToArray() | 复制 Stack 到一个新的数组中。 |
static void Main(string[] args)
{
var myStack = new Stack<int>();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
Console.WriteLine("包含3" + myStack.Contains(3));//包含3True
var first = myStack.Pop(); //4
var second = myStack.Pop();//3
Console.WriteLine($"第一个:{first},第二个:{second}");
Console.WriteLine("包含3" + myStack.Contains(3));//包含3False
Console.WriteLine(myStack.Count());//2
var third = myStack.Peek();
Console.WriteLine($"第三个:{third}"); //第三个: 2
Console.WriteLine(myStack.Count());//2 说明peek没有改变数量
}