美团一面:循环队列听说过么,怎么实现?

队列的底层是数组,我们常说的队列其实就是顺序队列,其数据结构定义一般是:,为了避免当只有一个元素时,队头队尾重合使处理变得麻烦,所以这里引入了队头和队尾两个指针,假设 front 指针指向队头元素,rear 指针指向队尾元素的下一个位置,这样:,示意图如下:,图片图片,众所周知,队列是先进先出的,那么进队操作对应的步骤就是:先送值到队尾,再将队尾指针 +1,出队操作:先取出队头元素,再将队头指针 +1,顺序队列存在假溢出问题 ,就是明明在队列中仍然有可以存放元素的空间却无法执行入队操作了,举个例子:,队列的大小是 5(数组容量为 5),一开始是空队列,然后依次入队了 A、B、C、D:,图片图片,然后 A 出队,B 出队,相应的 front 指针会往后移动两位:,图片图片,再入队一个新元素 E,此时 front 指针不变,rear 指针需要 +1,已经超出了数组的下标范围,就会导致新元素插入失败:,图片图片,明明队列中还有空间,插入元素竟然会失败?这就是一种假性上溢出现象。,如何解决这个问题呢,有三种:,因此,循环队列是解决顺序队列假溢出问题的最佳选择!,循环队列的数据结构定义一般是:,具体实现步骤如下:,示意图如下:,图片图片,以下是一个基于数组实现循环队列的 Java 代码示例:,简单总结就是:

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/29539.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年6月23日
下一篇 2023年7月15日