环形队列

可以先参考上一篇为什么会有环形队列
上一篇:队列

思路

  1. 约定front指向队列的第一个元素,也就是说data[front]就是队头数据,front初始值为0。
  2. 约定rear指向队列的最后一个元素的后一个位置,也就是说data[rear-1]就是队尾数据,rear初始值为0。
  3. 队列满的条件是:***( rear+1 )% maxSize == front***
  4. 队列空的条件是:rear == front
  5. 队列中的元素个数为:***( rear + maxsize - front) % maxSize***
  6. 因为rear指向队尾的后面一个位置,这个位置就不能存数据,因此有效数据只有maxSize-1个

下面分析判满、判空、元素个数的表达式

先举个例子,在一个由座位组成的环形中,设当前座位的位置是current,座位总个数是count,则当前位置的下一位置是(current+1)% count

判满
  • 队列满的情况无非就如下二图所示(为了便于分析,将数组队列画成一个环形,数组长度为8,即maxSize = 8)。由图可知当front刚好指向rear的下一个位置时队列满,而rear的下一个位置是 (rear+1)% maxSize,所以当( rear + 1 )% maxSize == front 时,队列就满了。
    环形队列_第1张图片
第一种,front刚好指向数组的头部,rear刚好指向数组尾部:front = 0,rear = 7

环形队列_第2张图片

第二种,front和rear都指向数组的中间:front = 4,rear = 3
判空
  • 队列为空的情况如下图所示,当队头队尾都指向一个位置,即 front == rear 时,队列为空。
    环形队列_第3张图片
当front == rear时,队列为空

你可能感兴趣的:(数据结构与算法)