C#栈和队列详解

 更新时间:2026年06月01日 10:32:05   作者:影寂ldy  
在C#中,栈(Stack)和队列(Queue)是两种非常重要的数据结构,它们各自具有独特的特点和用途,本文介绍C#栈和队列的相关知识,感兴趣的朋友一起看看吧

一、Stack 栈集合(先入后出)

1. 核心概念

栈是存储数据的容器,遵循 先入后出(后进先出 LIFO) 规则。

  • 数据存入:入栈(Push)
  • 数据取出:出栈(Pop)
  • 最先存进去的在栈底,最后存的在栈顶,只能操作栈顶元素

2. 两种定义方式

// 1. 泛型栈(推荐、类型安全、无装箱拆箱)
Stack<int> stack = new Stack<int>();
// 2. 非泛型栈(老旧、object存储、类型不安全、有装箱拆箱)
Stack stack1 = new Stack();
stack1.Push("张三"); //栈底
stack1.Push("李四");
stack1.Push("王五"); //栈顶

3. 栈核心五大方法

// 1. Push():入栈,数据压入栈顶
stack1.Push("张三");
stack1.Push("李四");
stack1.Push("王五");
// 2. Pop():出栈,删除并返回【栈顶】元素
Console.WriteLine(stack1.Pop()); //输出:王五
// 3. Peek():查看栈顶,只返回不删除
Console.WriteLine(stack1.Peek()); //输出:李四
// 4. Count:获取栈中元素个数
Console.WriteLine(stack1.Count);
// 5. 辅助方法
stack1.Clear();      //清空所有元素
stack1.Contains("张三"); //判断是否包含指定元素

4. 栈的遍历方式

没有索引,不能直接下标遍历,需转数组或 foreach

// 方式1:转数组遍历
for (int i = 0; i < stack1.Count; i++)
{
    Console.WriteLine(stack1.ToArray()[i]);
}
// 方式2:foreach 遍历
foreach (var i in stack1)
{
    Console.WriteLine(i + "-----");
}

5. 栈执行流程演示

  • 入栈顺序:张三 → 李四 → 王五
  • 栈内结构:栈底【张三、李四、王五】栈顶
  • Pop() 弹出:先出王五,再出李四,最后出张三

二、Queue 队列集合(先入先出)

1. 核心概念

队列遵循 先入先出(先进先出 FIFO) 规则,类似排队。

  • 数据存入:入队(Enqueue)
  • 数据取出:出队(Dequeue)
  • 先排队的先出去,后排队的后出去

2. 定义与基础用法

// 泛型队列(项目推荐、类型安全)
Queue<string> queue = new Queue<string>();
// 入队:从队尾添加元素
queue.Enqueue("hello1");
queue.Enqueue("hello2");
queue.Enqueue("hello3");

3. 队列核心方法

// 1. Dequeue():出队,删除并返回【队首】第一个元素
Console.WriteLine(queue.Dequeue()); //hello1
// 2. Peek():只查看队首元素,不删除
Console.WriteLine(queue.Peek()); //hello2
// 3. 其他方法
Console.WriteLine(queue.Count); //元素个数
queue.Clear(); //清空
queue.Contains("hello2"); //判断包含

4. 队列遍历

foreach (var item in queue)
{
    Console.WriteLine(item);
}

5. 队列执行流程

  • 入队顺序:hello1 → hello2 → hello3
  • 队首 hello1,队尾 hello3
  • Dequeue 优先取出最先进来的元素

三、Stack 与 Queue 核心区别(必背)

集合

规则

存入方法

取出方法(删+返)

查看方法(只返不删)

Stack 栈

先入后出

Push()

Pop() 取栈顶

Peek() 看栈顶

Queue 队列

先入先出

Enqueue()

Dequeue() 取队首

Peek() 看队首

四、所有集合访问方式终极总结

  • 数组、List、ArrayList、SortedList:支持索引 [下标] 访问
  • Dictionary、Hashtable:只能 Key 访问,无索引
  • Stack、Queue无索引,只能专用方法存取,不能下标访问

五、终极背诵口诀

  • 栈 Stack:压栈Push、弹栈Pop,后进先出
  • 队列 Queue:入队Enqueue、出队Dequeue,先进先出
  • Peek:只查看、不删除
  • 泛型集合安全高效,非泛型老旧淘汰

到此这篇关于C#栈和队列详解的文章就介绍到这了,更多相关C#栈和队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于C#实现屏幕取色器

    基于C#实现屏幕取色器

    这篇文章主要为大家详细介绍了如何利用C#实现简易的屏幕取色器,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12
  • 不用IDE写C#的Hello World的方法

    不用IDE写C#的Hello World的方法

    这篇文章主要介绍了不用IDE写C#的Hello World的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-10-10
  • 举例讲解C#中自动实现的属性

    举例讲解C#中自动实现的属性

    这篇文章主要介绍了C#中自动实现的属性,包括使用自动实现的属性实现轻量类的方法,需要的朋友可以参考下
    2016-01-01
  • C#二分查找算法实例分析

    C#二分查找算法实例分析

    这篇文章主要介绍了C#二分查找算法,实例分析了C#二分查找的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • c# 使用计时器和观察者模式实现报警推送需求

    c# 使用计时器和观察者模式实现报警推送需求

    这篇文章主要介绍了c# 使用计时器和观察者模式实现报警推送需求,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C#中改变DataGridView控件边框颜色的方法

    C#中改变DataGridView控件边框颜色的方法

    这篇文章主要介绍了C#中改变DataGridView控件边框颜色的方法,默认的DataGridView边框颜色很丑,本文用编程方法实现修改DataGridView边框颜色,需要的朋友可以参考下
    2014-08-08
  • C#的字符串比较

    C#的字符串比较

    这篇文章主要介绍了c# 字符串操作的相关知识,文中讲解的非常详细,代码帮助大家更好的学习,感兴趣的朋友可以参考下,希望能给你带来帮助
    2021-07-07
  • C# 如何实现一个带通知的List<T>

    C# 如何实现一个带通知的List<T>

    这篇文章主要介绍了C# 如何实现一个带通知的List<T>,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-02-02
  • C#基于Aspose.PDF实现PDF转Word工具

    C#基于Aspose.PDF实现PDF转Word工具

    这篇文章主要为大家介绍了C#如何基于Aspose.PDF库,实现PDF文件转为Word(DOC/DOCX)格式的功能,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • C#数组排序的两种常用方法

    C#数组排序的两种常用方法

    这篇文章主要介绍了C#数组排序的两种常用方法,实例分析了C#操作数组的相关技巧,需要的朋友可以参考下
    2015-05-05

最新评论