C# - Stack

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。 向一个栈插入新元素又称作进栈、入栈或压栈(push),它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素; 从一个栈删除元素又称作出栈或退栈(pop),它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 它这种存储方式被称为 LIFO (Last in first out)(后进先出,选进后出) C# 包括泛型 Stack 和非泛型 Stack 集合类。 建议使用泛型 Stack 集合。

堆栈 Stack 特点

  • Stack 是后进先出集合。
  • 它位于 System.Collection.Generic 命名空间下。
  • Stack 可以包含指定类型的元素。 它提供编译时类型检查并且不执行装箱拆箱,因为它是泛型。
  • 可以使用 Push() 方法添加元素。 不能使用集合初始值设定项语法。
  • 可以使用 Pop() 和 Peek() 方法检索元素。 它不支持索引器。

创建一个堆栈 Stack

您可以通过为 Stack 可以存储的元素类型指定类型参数来创建 Stack 的对象。 以下示例使用 Push() 方法在 Stack 中创建和添加元素。 堆栈允许null(对于引用类型)和重复值。

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 类的方法和属性

下表列出了 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 到一个新的数组中。

contains pop peek 例子

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没有改变数量 
}
下一篇:C# 队列 Queue
最近更新的
...