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