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

2021年3月19日12:56:45 发表评论 1,959 次浏览

本文概述

一种栈用于表示对象的后进先出集合。当你需要对项目进行后进先出的访问时使用。它具有通用和非通用类型的集合。通用栈在System.Collections.Generic名称空间, 而非通用栈则在系统集合命名空间, 这里我们将讨论非通用类型栈。栈用于根据程序的需要创建一个不断增长的动态集合。在栈中, 你可以存储相同类型或不同类型的元素。

C#栈Stack如何使用?代码示例指南1

下图说明了Stack类的层次结构:

C#栈Stack如何使用?代码示例指南2

重要事项:

  • 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
1234

G
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 {
 
     // 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" );
 
         // 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命名空间下定义。
通用栈只能存储相同类型的元素。 非通用栈可以存储相同类型或不同类型的元素。
需要定义栈中元素的类型。 无需定义栈中元素的类型。
这是类型安全的。 它不是类型安全的。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: