1、Stack定义
System.Collections.Stack类表示对象的简单的后进先出非泛型集合。
2.优点
1、后进先出的集合。
2、Stack 能接受空引用作为有效值并且允许重复的元素
3. Stack的构造器
构造器函数 | 注释 |
初始化 Stack 类的新实例,该实例为空并且具有默认初始容量。 | |
初始化 Stack 类的新实例,该实例包含从指定集合复制的元素并且具有与所复制的元素数相同的初始容量。 | |
初始化 Stack 类的新实例,该实例为空并且具有指定的初始容量或默认初始容量(这两个容量中的较大者)。 |
4、Stack的属性
属性名 | 注释 |
获取 Stack 中包含的元素数。 |
5. Stack的方法
方法名 | 注释 |
Void Clear() | 从 Stack 中移除所有对象。 |
Bool Contains(object obj) | 确定某元素是否在 Stack 中。 |
Object Clone() | 创建 Stack 的浅表副本。 |
Void CopyTo(Array array,int index) | 从指定数组索引开始将 Stack 复制到现有一维 Array中。 |
Object Pop() | 移除并返回位于 Stack 顶部的对象。 |
Void Push(object obj) | 将对象插入 Stack 的顶部。 |
Object Peek() | 返回位于 Stack 顶部的对象但不将其移除。 |
Object[]ToArray() | 将 Stack 复制到新数组中。 |
6、Stack的使用示例
代码
class Program
{
public static void Main()
{
//创建一个堆栈
Stack myStack = new Stack();
myStack.Push("The");//入栈
myStack.Push("quick");
myStack.Push("brown");
myStack.Push("fox");
// 打印集合中的值
Console.Write("Stack values:");
PrintValues(myStack, '\t');
// 打印堆栈顶部的第一个元素,并将其移除
Console.WriteLine("(Pop)\t\t{0}", myStack.Pop());
//打印集合中的值
Console.Write("Stack values:");
PrintValues(myStack, '\t');
// 打印堆栈顶部的第一个元素,并将其移除
Console.WriteLine("(Pop)\t\t{0}", myStack.Pop());
//打印集合中的值
Console.Write("Stack values:");
PrintValues(myStack, '\t');
// 打印堆栈顶部的第一个元素
Console.WriteLine("(Peek)\t\t{0}", myStack.Peek());
// 打印集合中的值
Console.Write("Stack values:");
PrintValues(myStack, '\t');
Console.Read();
}
public static void PrintValues(IEnumerable myCollection, char mySeparator)
{
foreach (Object obj in myCollection)
Console.Write("{0}{1}", mySeparator, obj);
Console.WriteLine();
}
}
7.备注
1、Stack 的容量是 Stack 可以保存的元素数。Stack 的默认初始容量为 10。向 Stack 添加元素时,将通过重新分配来根据需要自动增大容量。
2、容量是 Stack 可存储的元素数。Count 是 Stack 中实际存储的元素数,容量始终大于或等于 Count。如果在添加元素时 Count 超过容量,则通过在复制旧元素和添加新元素之前重新分配内部数组来自动增大容量
3、无论是Peek还是Pop应当都要先验证Stack是否为空
(如Stack.Count == 0 ? return:Console.WriteLine("(Pop)\t\t{0}", myStack.Pop());)