我是靠谱客的博主 优秀巨人,这篇文章主要介绍使用数组模拟环形队列,现在分享给大家,希望可以做个参考。

思路如下(环形队列):

 

  1. front:front指向队列的第一个元素,即arr[front]就是数组的第一个元素,front的初始值是0;
  2. rear:rear指向队列最后一个元素的后一个位置,因为希望空出一个空间作为约定,rear的初始值是0;
  3. 当队列满时,条件是(rear+1)%maxSize==front;(即front和rear位置相邻)
  4. 当队列为空时,条件是rear==front;
  5. 当我们这样分析时,队列的有效数据的个数是:(rear+maxSize-front)%maxSize
    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    class CircleArray { private int maxSize;//数组最大容量 private int front;//队列头,指向队列的第一个元素 private int rear;//队列尾的后一个位置,指向队列最后一个元素的后一个位置 private int[] arr;//该数组用于存放数据,模拟队列 public CircleArray(int arrMaxSize) { maxSize=arrMaxSize; arr=new int[maxSize]; front=0; rear=0; } //判断队列是否满 public boolean isFull() { return (rear+1)%maxSize==front; } //判断队列是否为空 public boolean isEmpty() { return rear==front; } //添加数据到队列 public void addQueue(int n) { //判断队列是否满 if(isFull()) { System.out.println("队列已满"); return; } arr[rear]=n; //将rear后移一位,考虑取模 rear=(rear+1)%maxSize; } //获取队列的数据或数据出队列 public int getQueue() { if(isEmpty()) { throw new RuntimeException("队列为空"); } //1、先把front对应的值保存到一个临时变量 //2、将front后移,考虑取模---->front=(front+1)%maxSize //3、返回临时保存的变量 int res=arr[front]; front=(front+1)%maxSize; return res; } //显示队列所有数据 public void showQueue() { if(isEmpty()) { System.out.println("队列为空,没数据"); return; } //从front开始遍历,遍历多少个元素 for(int i=front;i<front+size();++i) { System.out.printf("arr[%d]=%dn",i%maxSize,arr[i%maxSize]); } } //求出当前队列有效数据的个数 public int size() { return (rear+maxSize-front)%maxSize; } //显示队列头数据 public int headQueue() { if(isEmpty()) { throw new RuntimeException("队列为空,没数据"); } return arr[front]; } }

     

最后

以上就是优秀巨人最近收集整理的关于使用数组模拟环形队列的全部内容,更多相关使用数组模拟环形队列内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部