数据结构之队列queue

本文介绍了队列的基本概念、特征和工作原理,重点讲述了如何使用C++实现队列,包括顺序表和链表两种方式,并列举了队列在编程练习中的应用,如舞伴问题、游程编码和杨辉三角等。
摘要由CSDN通过智能技术生成

C++数据结构之队列queue

  • 什么是队列

  • 队列的基本特征

  • 队列是如何工作的

  • 队列的实现

  • 队列的应用

什么是队列

与栈相反,队列是一种先进先出(FIFO)的线性表,只允许在表的一端插入,在另一端删除。允许插入的一端叫队尾,允许删除 的一端叫队头。比较典型的例子有日常生活中的排队:银行排序办理业务、地铁排队上车(emmmm,这里假设所有人都遵守秩序)等,当然还有计算机系统的消息队列,操作系统的作业调度(这两者都可以看做是队列,不过是队列的高级应用:优先级队列)等


队列的基本特征

- 先进先出(FIFO)
- 限制插入和删除:队尾(back)插入,队头(front)删除

队列是如何工作的

如下图所示:

队列

front代表队头,back代表队尾,初始状态,front与back指向同一位置,当插入一个新元素a后,队尾back向后移动一位,队头front不动,指向下一个位置,当在a的下一个位置插入元素b时,队尾back继续向后移动一位,直到满队列,此时back指向最后的位置。当删除一个元素时,队头front向后移动一位,队尾back不动。在这种队列结构下,可以通过(front == back)来判断队列是否为空。

队列的实现

队列的实现主要有两种方式:顺序表和链表;队列的操作主要有:取出队头元素(front())、
删除队头元素(pop())、队尾插入元素(push())、是否为空(Empty())、队列元素数(size())
、是否已满(Full())

顺序表实现队列

顺序表的实现较为简单,直接使用数据存储数据即可,而frontback代表数组的下标(索引),
这样做的缺点就是队列的长度固定,同时由于每次删除元素时,队头向后移动一位,当队列中所有
元素被删除时,此时front ==back,但是,此时继续向队列中插入元素时,就会出现数组越界的
情况。

越界

如上所示,此时,frontback都以指向了最后位置,无法继续在队列中插入数,但是,
front前面的空间仍旧是空的,没有存储内容,此时如果采用动态内存分配无疑会浪费内
存空间,因此,为了能够充分利用已分配的数组空间,可以将数组想象为一个首尾相
接的环,循环存储数据,称之为循环队列。

循环队列

如上,将数组想象成环状,初始时,frontback都指向起始位置,当有元素插入或者删除时,
进行相应的移动,直到
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

居庆说数

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值