C# Stack (栈)是常见的数据结构之一,栈是一种先进后出的结构,即元素从栈的尾部插入,从栈的尾部移除,类似于日常生活中搬家的时候装车,先装上车的东西要后拿下来。
Stack 类提供了 3 种构造方法,如下表所示。
构造方法 | 作用 |
---|---|
Stack() | 使用初始容量创建 Stack 的对象 |
Stack(ICollection) | 创建 Stack 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素个数、增长因子相同 |
Stack(int capacity) | 创建 Stack 的实例,并设置其初始容量 |
集合中的 Stack 类模拟了栈操作,提供了栈中常用的方法和属性。
一、常用方法
1、Stack.Push(Object)方法
在 Stack 的顶部插入一个对象。
Stack test = new Stack();
test.Push(123);
test.Push(234);
test.Push(345);
test.Push(456);
foreach (var v in test)
{
Console.WriteLine(v);//先进后出
}
2、Stack.Peek 方法
用于获取栈顶元素的值,但不移除栈顶元素的值
Stack test = new Stack();
test.Push(123);
test.Push(234);
test.Push(345);
test.Push(456);
test.Peek();
Console.WriteLine("本次返回的值是:{0}",test.Peek());
foreach(var v in test)
{
Console.WriteLine(v);
}
3、Stack.Pop() 方法
用于获取栈顶元素的值,并移除栈顶元素
Stack test = new Stack();
test.Push(123);
test.Push(234);
test.Push(345);
test.Push(456);
foreach(var v in test)
{
Console.WriteLine(v);
}
test.Pop();
Console.WriteLine("Pop后遍历的结果:");
foreach(var v in test)
{
Console.WriteLine(v);
}
4、Clear 方法
从 Stack 中移除所有的元素。
Stack test = new Stack();
test.Push(123);
test.Push(234);
test.Push(345);
test.Push(456);
foreach(var v in test)
{
Console.WriteLine(v);
}
test.Clear();
Console.WriteLine("清除后的遍历结果:")
foreach(var v in test)
{
Console.WriteLine(v);
}
5、Stack.Contains(Object) 方法
确定某元素是否在 Stack 中。
public virtual bool Contains (object obj);
Stack test = new Stack();
test.Push(123);
test.Push(234);
test.Push(345);
test.Push(456);
bool answer = test.Contains(345);
Console.WriteLine(answer);
6、Stack.CopyTo(Array, Int32) 方法
从指定数组索引开始将 Stack 复制到现有一维 Array 中。
public virtual void CopyTo (Array array, int index);
源 Stack 中的元素个数小于等于从 index 到目标 array 末尾之间的可用空间。
Stack test = new Stack();
test.Push(123);
test.Push(234);
test.Push(345);
test.Push(456);
int[] nums = new int[]{234,645,765,876,45,3423};
test.CopyTo(nums,2);
foreach(var v in nums)
{
Console.WriteLine(v);
}
7、Stack.ToArray 方法
将 Stack 复制到新数组中。
Stack test = new Stack();
test.Push(123);
test.Push(234);
test.Push(345);
test.Push(456);
var myA = test.ToArray();
foreach (var v in myA)
{
Console.WriteLine(v);
}
二、常用属性
Count 属性
获取 Stack 中包含的元素数。
Stack test = new Stack();
test.Push(123);
test.Push(234);
test.Push(345);
test.Push(456);
Console.WriteLine(test.Count);