C#栈Stack如何使用(代码示例指南)

  • 如何创建栈?
  • 如何从栈中删除元素?
  • 如何获得栈的最高元素?
  • 如何检查栈中元素的可用性?
  • 通用栈与非通用栈
目录本文概述
  • C#
  • C#
  • C#
  • C#
一种栈用于表示对象的后进先出集合。当你需要对项目进行后进先出的访问时使用。它具有通用和非通用类型的集合。通用栈在System.Collections.Generic名称空间, 而非通用栈则在系统集合命名空间, 这里我们将讨论非通用类型栈。栈用于根据程序的需要创建一个不断增长的动态集合。在栈中, 你可以存储相同类型或不同类型的元素。
C#栈Stack如何使用(代码示例指南)

文章图片
【C#栈Stack如何使用(代码示例指南)】下图说明了Stack类的层次结构:
C#栈Stack如何使用(代码示例指南)

文章图片
重要事项:
  • Stack类实现了IEnumerable, ICollection和可克隆接口。
  • 当你在列表中添加项目时, 该项目称为推动元素。
  • 当你删除它时, 它称为弹出元素。
  • 栈的容量是栈可以容纳的元素数量。将元素添加到栈后, 容量会根据需要通过重新分配自动增加。
  • 在栈中, 允许你存储重复的元素。
  • 栈接受null作为引用类型的有效值。
如何创建栈? 栈类有三用于创建栈的构造函数如下:
  • Stack():该构造函数用于创建Stack类的实例, 该实例为空并具有默认初始容量。
  • 栈(ICollection):此构造函数用于创建Stack类的实例, 该实例包含从指定集合中复制的元素, 并且具有与复制的元素数量相同的初始容量。
  • 栈(Int32):此构造函数用于创建Stack类的实例, 该实例为空并具有指定的初始容量或默认初始容量(以较大者为准)。
让我们看看如何使用Stack()构造函数创建栈:
第1步:
包括
系统集合
借助using关键字在程序中命名空间。
using System.Collections;

第2步:使用Stack类创建一个栈, 如下所示:
Stack stack_name = new Stack();

第三步:如果要在栈中添加元素, 请使用推()在栈中添加元素的方法。如下例所示。
例子:
C#
// C# program to illustrate how to // create a stack using System; using System.Collections; class GFG { // Main Method static public void Main() { // Create a stack // Using Stack class Stack my_stack = new Stack(); // Adding elements in the Stack // Using Push method my_stack.Push( "Geeks" ); my_stack.Push( "lsbin" ); my_stack.Push( 'G' ); my_stack.Push( null ); my_stack.Push(1234); my_stack.Push(490.98); // Accessing the elements // of my_stack Stack // Using foreach loop foreach ( var elem in my_stack) { Console.WriteLine(elem); } } }

输出如下:
490.98 1234G lsbin Geeks

如何从栈中删除元素? 在栈中, 允许你从栈中删除元素。 Stack类提供了两种不同的方法来删除元素, 这些方法是:
  • 明确:此方法用于从栈中删除所有对象。
  • 流行音乐:此方法删除栈的开始元素。
例子:
C#
// C# program to illustrate how to // remove elements from the stack using System; using System.Collections; class GFG { // Main Method static public void Main() { // Create a stack // Using Stack class Stack my_stack = new Stack(); // Adding elements in the Stack // Using Push method my_stack.Push( "Geeks" ); my_stack.Push( "lsbin" ); my_stack.Push( "geeks23" ); my_stack.Push( "lsbin" ); Console.WriteLine( "Total elements present in" + " my_stack: {0}" , my_stack.Count); my_stack.Pop(); // After Pop method Console.WriteLine( "Total elements present in " + "my_stack: {0}" , my_stack.Count); // Remove all the elements // from the stack my_stack.Clear(); // After Pop method Console.WriteLine( "Total elements present in " + "my_stack: {0}" , my_stack.Count); } }

输出如下:
Total elements present in my_stack: 4 Total elements present in my_stack: 3 Total elements present in my_stack: 0

如何获得栈的最高元素? 在Stack中, 可以使用Stack类提供的以下方法轻松地找到栈的最顶层元素:
  • 流行音乐:该方法通过修改返回栈的开始处的对象, 这意味着该方法将删除栈中最顶层的元素。
  • 窥视:此方法在不删除对象的情况下将其返回到栈的开头。
例子:
C#
// C# program to illustrate how to // get topmost elements of the stack using System; using System.Collections; class GFG { // Main Method static public void Main() { // Create a stack // Using Stack class Stack my_stack = new Stack(); // Adding elements in the Stack // Using Push method my_stack.Push( "Geeks" ); my_stack.Push( "lsbin" ); my_stack.Push( "geeks23" ); my_stack.Push( "lsbin" ); Console.WriteLine( "Total elements present in" + " my_stack: {0}" , my_stack.Count); // Obtain the topmost element // of my_stack Using Pop method Console.WriteLine( "Topmost element of my_stack" + " is: {0}" , my_stack.Pop()); Console.WriteLine( "Total elements present in" + " my_stack: {0}" , my_stack.Count); // Obtain the topmost element // of my_stack Using Peek method Console.WriteLine( "Topmost element of my_stack " + "is: {0}" , my_stack.Peek()); Console.WriteLine( "Total elements present " + "in my_stack: {0}" , my_stack.Count); } }

输出如下:
Total elements present in my_stack: 4 Topmost element of my_stack is: lsbin Total elements present in my_stack: 3 Topmost element of my_stack is: geeks23 Total elements present in my_stack: 3

如何检查栈中元素的可用性? 在栈中, 你可以使用来检查给定元素是否存在包含()方法。换句话说, 如果要搜索给定栈中的元素, 请使用Contains()方法。如果元素存在于栈中, 则此方法返回true。否则, 返回false。
例子:
C#
// C# program to illustrate how // to check element present in // the stack or not using System; using System.Collections; class GFG { // MainMethod static public void Main() { // Create a stack // Using Stack class Stack my_stack = new Stack(); // Adding elements in the Stack // Using Push method my_stack.Push( "Geeks" ); my_stack.Push( "lsbin" ); my_stack.Push( "geeks23" ); my_stack.Push( "lsbin" ); // Checking if the element is // present in the Stack or not if (my_stack.Contains( "lsbin" ) == true ) { Console.WriteLine( "Element is found...!!" ); } else { Console.WriteLine( "Element is not found...!!" ); } } }

输出如下:
Element is found...!!

通用栈与非通用栈
通用栈
非通用栈
通用栈在System.Collections.Generic命名空间下定义。 非通用栈在System.Collections命名空间下定义。
通用栈只能存储相同类型的元素。 非通用栈可以存储相同类型或不同类型的元素。
需要定义栈中元素的类型。 无需定义栈中元素的类型。
这是类型安全的。 它不是类型安全的。

    推荐阅读