队列、环形队列(用数组实现)

  1 package com.aixuexi.contact;
  2 
  3 public class CirArrQunue {
  4     public static void main(String[] args) {
  5         /*
  6          * 2019/7/15 15点58分
  7          * 2个问题   几个算法公式
  8          * 
  9          * 
 10          *     (rear + 1) % maxSize == front 判断队列是否满
 11          *     rear = 4      屁股
 12          *     front = 0     头
 13          *     maxSize = 5    最大数
 14          *  (4 + 1) % 5 = 0
 15          * 
 16          * 
 17          *  rear == front
 18          *     默认 都为0
 19          * 
 20          * 
 21          *     (rear + 1) % maxSize
 22          *     添加元素 尾指针+1
 23          *     默认  rear = 0 
 24          *     maxSize = 5    最大数
 25          *     rear = (rear + 1) % 5
 26          * 
 27          * 
 28          *     (front + 1) % maxSize
 29          *     front = (front + 1) % maxSize; //将 front 后移, 考虑取模
 30          *     默认front = 0     头
 31          *     front = (0 + 1) % 5         front == 1
 32          * 
 33          * 
 34          *     (rear + maxSize - front) % maxSize    算个数
 35          *     rear = 3
 36          *     maxSize = 5
 37          *     front  = 0 没弹出数据
 38          *     value = (3 + 5 - 0)%5   valiue == 3
 39          * 
 40          * 
 41          *     显示队列
 42          *     for(int i = front; i <front + Size(); i++) { //front + Size()     去掉为什么不行
 43          * 
 44          * 42行   75 行
 45          */
 46         
 47         CircleArray queue = new CircleArray(5);   //队列有四个元素
 48         
 49         System.out.println(queue.isFull());
 50         System.out.println(queue.isEmpty());
 51         
 52         System.out.println(queue.addQueue(7));
 53         System.out.println(queue.addQueue(8));
 54         System.out.println(queue.addQueue(1));
 55         System.out.println(queue.addQueue(9));
 56         queue.Arrshow();
 57         
 58         System.out.println(queue.getQueue());
 59         queue.Arrshow();
 60         
 61         System.out.println(queue.getQueue());
 62         queue.Arrshow();
 63         //System.out.println(queue.headQunue());
 64         
 65     }
 66 }
 67 
 68 class CircleArray{
 69     
 70     private int maxSize;
 71     private int front;
 72     private int rear;
 73     private int[] arr;
 74     //设置队列有多少个元素
 75     public CircleArray(int arrmaxSize) {
 76         // 注意: 不要重复定义了 int maxSize 不对 会重新产生变量
 77         maxSize = arrmaxSize;
 78         arr = new int[maxSize];
 79     }
 80     
 81     //判断队列是否满
 82     public boolean isFull() {
 83         return (rear + 1) % maxSize == front;
 84     }
 85     //判断队列是否空
 86     public boolean isEmpty() {
 87         return rear == front;
 88     }
 89     //添加元素
 90     public int addQueue(int n) {
 91         if(isFull()) {
 92             return -1;
 93         } 
 94         arr[rear] = n;
 95         rear = (rear + 1) % maxSize;//
 96         return 1;        
 97     }
 98     //弹出队列的第一个元素
 99     public int getQueue() {
100         if(isEmpty()) {
101             return -1;
102         } else {
103             int value = arr[front];
104             front = (front + 1) % maxSize; //将 front 后移, 考虑取模
105             return value;
106         }
107     }
108     //显示队列
109     public void Arrshow() {
110         for(int i = front; i <front + Size(); i++) { //front + Size()     去掉为什么不行
111             System.out.printf("arr[%d]=%d
", i % maxSize, arr[i % maxSize]);
112         }
113     }
114     //大小 队列
115     public int Size() {
116         return (rear + maxSize - front) % maxSize;//
117     }
118     //返回队列头的数值
119     public int headQunue() {
120         if(isEmpty()) {
121             return -1;
122         }
123         return arr[front];
124     }
125 }
原文地址:https://www.cnblogs.com/yaozhenhua/p/11190966.html