当前位置:首页 > C# > 正文

C# Stack

在C#编程中,Stack<T> 是一个非常实用的泛型集合类,它实现了经典的 后进先出(Last In First Out, LIFO) 数据结构。无论你是刚接触编程的新手,还是有一定经验的开发者,掌握 Stack 的使用方法对解决特定问题(如撤销操作、表达式求值、深度优先搜索等)都非常有帮助。

C# Stack Stack栈 后进先出 LIFO数据结构 C#集合类 第1张

什么是后进先出(LIFO)?

想象你有一摞盘子:每次你只能把新盘子放在最上面,而拿盘子时也只能从最上面拿。最后放上去的盘子最先被拿走——这就是 后进先出(LIFO) 的核心思想。

在 C# 中,Stack<T> 正是基于这一原理设计的集合类型,属于 C#集合类 的重要成员之一。

如何创建和使用 Stack<T>?

首先,你需要引用 System.Collections.Generic 命名空间:

using System;using System.Collections.Generic;class Program{    static void Main()    {        // 创建一个字符串类型的栈        Stack<string> myStack = new Stack<string>();        // 使用 Push 方法入栈        myStack.Push("苹果");        myStack.Push("香蕉");        myStack.Push("橙子");        // 使用 Peek 查看栈顶元素(不移除)        Console.WriteLine($"栈顶元素是:{myStack.Peek()}"); // 输出:橙子        // 使用 Pop 出栈(移除并返回栈顶元素)        while (myStack.Count > 0)        {            string item = myStack.Pop();            Console.WriteLine($"取出:{item}");        }    }}

运行上述代码,输出结果为:

栈顶元素是:橙子取出:橙子取出:香蕉取出:苹果

可以看到,最后压入栈的“橙子”最先被取出,完美体现了 后进先出 的特性。

Stack<T> 的常用方法

  • Push(T item):将元素压入栈顶。
  • Pop():移除并返回栈顶元素。如果栈为空,会抛出 InvalidOperationException
  • Peek():返回栈顶元素但不移除它。
  • Count:获取栈中元素的数量。
  • Clear():清空栈中所有元素。

安全使用 Pop 和 Peek

为了避免在空栈上调用 Pop()Peek() 导致程序崩溃,建议先检查 Count 属性:

if (myStack.Count > 0){    string top = myStack.Pop();    Console.WriteLine(top);}else{    Console.WriteLine("栈为空!");}

实际应用场景

- 撤销(Undo)功能:用户每执行一个操作就压入栈,撤销时弹出最近的操作。

- 括号匹配检测:遍历字符串,遇到左括号入栈,遇到右括号则尝试与栈顶匹配。

- 浏览器后退按钮:访问的页面按顺序入栈,点击“后退”即出栈。

总结

通过本文,你应该已经掌握了 C# 中 Stack<T> 的基本用法和 后进先出(LIFO) 的核心概念。作为 C#集合类 的重要组成部分,Stack栈 在处理需要逆序访问或临时存储的场景中非常高效。

记住关键点:Push 入栈,Pop 出栈,Peek 看栈顶。只要理解了盘子堆叠的比喻,你就真正理解了 LIFO数据结构

继续练习,你很快就能在项目中灵活运用 Stack 解决实际问题!