快速上手 C++ 数据结构与算法
王健伟
《C++ 新经典》系列作者,资深 C++ 讲师
3224 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
结束语 (1讲)
快速上手 C++ 数据结构与算法
15
15
1.0x
00:00/00:00
登录|注册

09|队列:如何实现数据的先进先出?

你好,我是王健伟。
上节课我们提到的“栈”,用的是“桶”和“抽屉”做类比,实现的是先进后出。这节课我们来聊“队列”,根据名字想象一下,它实现的是不是先进先出了呢?
是的。队列也是一种受限的线性表,它的特点是在一端进行插入操作,在另一端进行删除操作(与栈刚好相反)。把允许进行插入操作的一端称为队尾,允许删除操作的一端称为队头
把队列想象成人们排队购物,排在队伍第一位的人最先购买然后最先离开,而排在队伍最后一位的人最后购买最后离开。我们向队列中插入元素,就叫做入队,从队列中删除元素,叫做出队。不包含任何数据的队列,就是空队列。
队列也被称为先进先出(First In First Out:FIFO)的线性表。换句话说,插入数据只能在队尾(队列尾部)进行,删除数据只能在队头(队列头部)进行。
用队列存取数据的示意图,如图 1 所示:
图1  队列存取数据示意图
如果我们分别将数据 a1、a2、a3、a4、a5 入队,那么在将数据出队的时候,顺序同样是 a1、a2、a3、a4、a5,和入队顺序是一样的。
队列支持的操作和栈非常类似,一般包括队列的创建、入队(插入 / 增加数据)、出队(删除数据)、获取队头元素(查找数据)、判断队列是否为空或者是否已满等等操作。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了队列的基本概念和实现方法,重点讲解了顺序队列的实现原理和操作方法。通过生动的代码示例和图示,详细讲解了队列的特点、基本操作,以及顺序队列的入队、出队、获取队头元素等操作的代码实现。同时,还介绍了顺序队列的常用操作,如输出所有元素、获取长度、判断是否为空或已满等。文章还提到了顺序队列可能出现的“虚假满”问题,并提出了解决方案,即引入循环队列的概念。通过对循环队列的原理和操作方法的介绍,读者可以快速了解队列的基本概念和实现技术,对于理解和应用队列具有很好的指导意义。文章通过清晰的逻辑结构和丰富的示例,为读者提供了全面而深入的队列知识,使读者能够快速掌握队列的基本概念和实现技术。另外,还介绍了链式队列和双端队列的概念,为读者提供了更多队列的变种知识。整体而言,本文内容详实,逻辑清晰,对于想要深入了解队列数据结构及其实现方法的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《快速上手 C++ 数据结构与算法》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • 阿阳
    请问老师双端队列的应用场景一般是什么?能否举个例子

    作者回复: 标准库中的deque就是双端队列,应用场景。我还真没用过😂。在CHATGPT里询问一下吧

    2023-05-17归属地:江苏
    1
  • Se7en
    此处留言由我来占领

    作者回复: 👏👏

    2023-04-06归属地:北京
  • 阿阳
    基础的线性结构过了一遍,手敲代码,很大的收获。线性结构是基础,后面的树和图,难度更大。
    2023-05-25归属地:江苏
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部