拼命加载中~

循环数组

简介

  • 本篇关于数据结构循环数组的介绍。
  • Java中的部分对队列Queue是基于循环数组所构建的。

循环数组

  • 循环数组在实现队列Queue这种FIFO结构的时候被采用,它可以提高空间的利用率。

  • 用循环数组的方式实现时,为了方便判断队列时候为空或者蛮,可以采用以下方式:
    1. 设队列最大的容量为max_size,那么需要创建一个长度为max_size + 1的数组。因为队列中的状态共有0 ~ max_size总共max_size + 1种状态;
    2. 如图所示,其中rear为当前队列尾部元素在数组中的下标位置,而front为当前队列头部元素的逻辑上前一个位置的数组下标,存储队列元素的数组下标范围是0 ~ max_size,则:
      1. 初始时,front = rear = 0
      2. 队列为满的条件是:(rear + 1) % (max_size + 1) == front
      3. 队列为空的条件是:front == rear
      4. 当有元素入队时,先判断是否为满,不满则更新尾部位置:rear = (rear + 1) % (max_size + 1),然后将新入队的元素添加到数组下标为rear处;
      5. 但有元素出队时,先判断是否为空,不空则更新头部位置:front = (front + 1) % (max_size + 1),数组下标为front的元素将作为出队元素。

总结

  • 以上即为循环数组的全部内容。
posted @ 2021-01-02 14:44  phax-ccc  阅读(591)  评论(0编辑  收藏  举报