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

数据结构总结3:栈和队列

后续会有补充和更改 

栈和队列

栈和队列也属于线性表 

一种特殊的线性表,只允许在固定的一端进行插入和删除元素。该端称为栈顶,另一端称为栈底。

栈中的数据遵循后进先出(LIFO)的原则

压栈/进栈/入栈:数据插入到栈中的操作。入数据在栈顶

出栈:栈中数据的删除操作。出数据也在栈顶 

栈的实现

 栈的实现一般可以使用数组或者链表来实现,相对而言数组的结构实现更优一些,因为栈的插入和删除都是在栈顶,也就是数组的尾部,而数组在尾上插入数据的代价比较小。

如果要用链式栈,用头部做栈顶更优一些

那么栈的实现是用数组好还是链表好呢?

用数组更好,因为栈基本上就是尾插尾删,而数组尾插尾删的效率很高,链表也是可以的,而且链表需要用双向的,如果用单向的话,尾插好说,但是尾删不好用

实际中一般不用定长的静态栈结构,所以主要学会实现动态增长的栈

栈不要轻易遍历,因为它是一边进一边出,遍历栈意味着把栈腾空

队列

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。队列具有先进先出(FIFO)的特性

队列和栈的某些性质相反

入队列:进行插入操作的一端称为队尾

出队列:进行删除操作的一端称为队头

队列的实现:

        队列也可以用数组和链表的结构实现,使用链表的结构实现更优一些,如果用数组,想队头出数据只能将其覆盖,效率比较低。

        另外,实际中我们有时还会使用一种队列叫循环队列。如生产者消费者模型中可能就会使用循环队列。环形队列可以使用数组实现,也可以使用环形链表实现。

队列的应用场景:

        1.排队。要保持绝对公平性的地方,用它。

        2.广度优先遍历。BFS、DFS。

http://www.lryc.cn/news/68808.html

相关文章:

  • 私有化部署的即时通讯软件:消息、文件安全加密,全面可控
  • 27-Django项目实战(5)
  • 【JVM】1. JVM与Java体系结构
  • 活动回顾|Kyligence x 亚马逊云科技,携手加速零售电商数智化转型
  • 本科毕业生10大高薪专业出炉,IT行业赢麻了
  • 工厂安灯呼叫系统解决方案
  • 微信xr-frame官方案例基础能力之渲染目标
  • 自动控制原理笔记-根轨迹法
  • 准备半个月,面试5分钟不到就凉了,问的实在太····
  • 基础IO(三)
  • 如何用国产DBDesginer软件进行数据库建模设计?
  • 精选 100 种最佳 AI 工具大盘点
  • Recognizing Micro-Expression in Video Clip with Adaptive Key-Frame Mining阅读笔记
  • 【SpringBoot整合RabbitMQ(上)】
  • Linux 设备驱动程序(二)
  • 性价比提升15%,阿里云发布第八代企业级计算实例g8a和性能增强型实例g8ae
  • Unity VR开发教程 OpenXR+XR Interaction Toolkit 番外(一)用 Grip 键, Trigger 键和摇杆控制手部动画
  • H.265/HEVC编码原理及其处理流程的分析
  • 数据结构初阶--链表OJⅡ
  • 离职or苟住?
  • 微服务之以nacos注册中心,以gateway路由转发服务调用实例(第一篇)
  • 主成分分析(PCA)直观理解与数学推导
  • 什么是合伙企业?普通合伙和有限合伙区别?
  • 系统结构考点之不明白的点
  • Android中AIDL的简单使用(Hello world)
  • ZED使用指南(五)Camera Controls
  • wrk泛洪攻击监控脚本
  • 软件I2C读写MPU6050代码
  • 销售/回收DSOS254A是德keysight MSOS254A混合信号示波器
  • RIDGID里奇金属管线检测仪故障定位仪维修SR-20KIT