视频:https://www.bilibili.com/video/BV18z4y1D7W9

队列就是先进先出的一种线性数据结构。

队列的数据结构

队列一般用

  1. {
  2. length: 100, // 队列的长度
  3. front0, // 队头下标
  4. rear0, // 队尾下标
  5. }

入队操作

在rear对应下标处存储,并且rear += 1。

出队操作

取出并删除在rear对应下标处存储,并且rear += 1。

假溢出

由于front和rear都只会++ 导致rear可能会溢出,但整个队列里的元素并没有满,这种现象就叫假溢出。

循环队列

image.png
循环队列当 (front 或 rear) + 1 溢出时就需要将 front 或 rear 指向 0 , 总结如下:

  1. const newFront = (front + 1) % arrayLength;
  2. const newRear = (rear + 1) % arrayLength;

问题:

  • 这样的循环队列无法判断满还是空,因为当满或者空时front和rear都指向同一个位置。如何解决?
    • 队列中舍弃一个元素,当入队时探测rear的下标是不是队尾,如果是直接循环到0。这样的话(rear+1)%length === front 时就是满;front===rear 时就是空;

队列的长度

  1. const queueLength = rear - front + maxQueueLength)% maxQueueLength;