当前位置: 首页 > news >正文

数据结构精讲:栈与队列实战指南

上节我们说到数据结构的动态链表实现方式,接下来我们讲一下数据结构中的栈和队列!

一、栈

1.定义

栈(Stack)是一种数据结构,它遵循“先进后出”的原则。也就是说,最后被加入栈中的元素会最先被移除(意思就是栈顶元素先被弹出)。

可以把栈想象成一堆盘子,盘子放得越高,最上面那个盘子就是你最先能拿到的,下面的盘子得等到上面的盘子被拿掉后才能拿到。

图示:

2.什么时候需要使用栈

  • 撤销、回溯:当需要处理“后退”操作时。
  • 递归或嵌套结构:当存在递归调用或嵌套的表达式、结构时。
  • 反向处理数据:当需要按逆序处理数据时。
  • 匹配和验证:当需要检查配对关系(如括号匹配、标签配对等)时。
  • 退出或返回操作:当需要模拟函数调用或“返回”操作时。
  • 有限的数据存储和顺序处理:当需要临时顺序存储并处理有限数据时。
  • 深度优先遍历:在遍历树或图时,栈可以帮助管理当前路径

比方说你想做一个计算器就可以用栈来进行存储数据内容。

3.如何实现栈

我们这里依旧使用的是用数组进行模拟栈。

代码说明:

stk[N]数组来进行存储数据

tt表示栈顶 (我们这里是当tt = 0 表示栈为空)

//插入元素
stk[++tt] = x;//弹出元素
tt--;//判断栈是否为空
if(tt == 0) 为空
else 不为空//访问栈顶元素
stk[tt]

二、队列

1.定义

队列(Queue)是一种线性数据结构,遵循 “先进先出” 的原则。也就是说,最早进入队列的元素会最先被移除,类似排队买票的过程:第一个排队的人先得到服务,最后一个排队的人则要等最久。

队列的基本操作:

  1. Enqueue(入队):将一个元素添加到队列的尾部。
  2. Dequeue(出队):从队列的头部移除一个元素,通常是返回并移除队列中的第一个元素。
  3. Front(队头):返回队列头部的元素,但不移除它。
  4. Rear(队尾):返回队列尾部的元素。
  5. IsEmpty(空队列检查):检查队列是否为空。
  6. Size(队列大小):返回队列中元素的个数。

队列的特点:

  • 先进先出:第一个进入队列的元素会是第一个被移除的元素。
  • 队列中元素的加入和移除操作总是发生在队尾和队头位置。

2.什么时候需要使用队列

按顺序处理任务:例如任务调度、请求处理、打印队列等。

广度优先搜索(BFS):用于按层次顺序遍历图或树。

消息队列:用于消息传递、任务异步处理。

流量控制和缓冲区管理:例如流量控制、生产者-消费者模型。

事件驱动模型:例如GUI事件、用户输入响应等。

缓存管理:例如缓存淘汰(FIFO策略)。

数据流处理:例如音视频流、实时数据传输等。

定时任务调度:确保任务按顺序执行。

进程间通信:多线程/多进程之间的数据传递。

使用队列的关键在于是否需要按顺序处理数据或任务,尤其是当任务或数据进入顺序非常重要时,队列是非常合适的选择。如果你还不确定某个场景是否适合使用队列,考虑是否需要保持顺序分配资源按时间排队处理任务,这些都是队列典型的应用场景。

3.如何实现队列

我们这里同样采用的是用数组进行模拟队列。

代码说明:

q[N] 存储数值

hh 表示对头(设置为0)

tt 表示队尾(设置为-1)

//入队
q[++tt] = x;//出队
hh++;//判断队列是否为空
if(hh <= tt) 表示为空
else 表示不为空//取出对头
q[hh];

三、总结

这两个数据的写法比较简单,大家主要是要去理解一下它们的使用场景!!!

.想,全是问题;做,才有答案。大家共勉!


文章转载自:

http://6dFGPbqd.rkqqf.cn
http://M2gVJAlQ.rkqqf.cn
http://LZlO6A7O.rkqqf.cn
http://w74LXou5.rkqqf.cn
http://8ik7LC1M.rkqqf.cn
http://p93Q9Tah.rkqqf.cn
http://kVZSXw0u.rkqqf.cn
http://ZqJaG8ip.rkqqf.cn
http://eotvyHV3.rkqqf.cn
http://0sr48XOl.rkqqf.cn
http://GckAqCyS.rkqqf.cn
http://LDo6DqzH.rkqqf.cn
http://FzKkv1ix.rkqqf.cn
http://GYIapHRa.rkqqf.cn
http://0d17GBAT.rkqqf.cn
http://Uc8i38I7.rkqqf.cn
http://ER1lazaE.rkqqf.cn
http://bcOmuwY2.rkqqf.cn
http://H2kyPare.rkqqf.cn
http://ab0yuHZR.rkqqf.cn
http://wZrMCfRB.rkqqf.cn
http://Ad5m2Ou9.rkqqf.cn
http://2eSnlr34.rkqqf.cn
http://KNg7IYxi.rkqqf.cn
http://pl7HBLaT.rkqqf.cn
http://nWF6oHze.rkqqf.cn
http://8dW6lih9.rkqqf.cn
http://P0GN534h.rkqqf.cn
http://pUDqXgRE.rkqqf.cn
http://WDoGEIMF.rkqqf.cn
http://www.dtcms.com/a/372111.html

相关文章:

  • 风电设备预测性维护方案:AIoT驱动的风电运维智能化转型​
  • Shell脚本监控系统资源详解
  • Vue基础知识-脚手架开发-Vue Router路由及params、query传参
  • 鱼眼相机模型
  • 类的加载和对象的创建
  • trl GRPO源码分析:如何处理多个reward function?
  • 临床研究三千问——临床研究体系的3个维度(8)
  • TypeORM入门教程:@JoinColumn和@OneToOne的关系
  • html列表标签之无序列表
  • [1]-01-创建空工程
  • 【模型训练篇】VeRL核心思想 - 论文HybridFlow
  • pycharm设置编辑区字体大小
  • 鸿蒙NEXT跨设备数据同步实战:分布式应用开发指南
  • C++ 中栈 (Stack) 详解和常见面试示例汇总实现
  • [光学原理与应用-461]:波动光学 - 波片实现偏振态的转换或调整
  • 苍穹外卖Day12 | Apache POI、导出Excel报表、HttpServletResponse、工作台
  • 《Go小技巧易错点100例》第三十八篇
  • Conda 包管理器与环境管理使用指南
  • 笔记本、平板如何成为电脑拓展屏?向日葵16成为副屏功能一键实现
  • OpenHarmony 显示能效管理组件:掌控屏幕亮灭与亮度的核心利器
  • SQLite的基本操作
  • 第五课 C#语言基本元素概览,初始类型,变量与方法,算法简介
  • 【系统分析师】第12章-关键技术:软件架构设计(核心总结)
  • Lightdash:一个免费开源的自助式BI平台
  • Claude Code 使用教程
  • UML(统一建模语言)
  • Android开发-常用布局
  • Spring Cloud Gateway 进行集群化部署
  • EmbodiedOneVision——类似π0.5集成了离散自回归解码与连续流匹配去噪:单个模型中完成具身推理、动作生成
  • Paper reading - 03. Speech sequencing in the human precentral gyrus