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. 栈核心五大方法

cs 复制代码
// 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

cs 复制代码
// 方式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. 定义与基础用法

cs 复制代码
// 泛型队列(项目推荐、类型安全)
Queue<string> queue = new Queue<string>();

// 入队:从队尾添加元素
queue.Enqueue("hello1");
queue.Enqueue("hello2");
queue.Enqueue("hello3");

3. 队列核心方法

cs 复制代码
// 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. 队列遍历

cs 复制代码
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:只查看、不删除

  • 泛型集合安全高效,非泛型老旧淘汰

相关推荐
mlidongfeng26 分钟前
[AI][C++26] SIMD 编程模型思考
开发语言·c++·人工智能
j7~27 分钟前
【Linux】二十七.线程篇四《Linux多线程编程:线程互斥(互斥量的底层到封装)、线程安全和冲入、死锁》---详解
linux·开发语言·c++·线程安全·死锁·线程互斥·重入
刘名喜37 分钟前
第09篇-协程基础-Kotlin异步编程
开发语言·kotlin·springboot
其实防守也摸鱼42 分钟前
HackBar 工具完全指南:信息探测、漏洞验证与安全测试实战
开发语言·人工智能·学习·安全·网络安全·安全威胁分析·安全性测试
会博通·代码搬运工1 小时前
会博通API对接实战:工程企业文档分布式采集系统的技术实现与Python SDK详解
开发语言·分布式·python·线性代数·矩阵·架构·电子档案合规
林森lsjs1 小时前
完结撒花!Java SE 语法阶段总结!
java·开发语言
lupai1 小时前
短信接口快速接入与调用实战指南
java·开发语言·数据库
刘名喜1 小时前
第12篇-Gradle-Kotlin-DSL构建指南
开发语言·kotlin·springboot
大鱼>2 小时前
DSPy:LLM程序自动编译与提示词优化
开发语言·人工智能·python·深度学习
撩妹帝九歌2 小时前
Java文件写入与编码、字节数组、字符集、字符编解码 一文打通!
java·开发语言