1、源码
ArrayQueue
package com.study.queue;//使用数组模拟一个队列public class ArrayQueue {private int maxSize;//表示数组的最大容量private int front;//队列头private int rear;//队列尾private int[] arr;//该数组用于存放数据,模拟队列//创建队列构造器public ArrayQueue(int arrMaxSize){maxSize = arrMaxSize;arr = new int[maxSize];front=-1;//指向队列头部,前一个数据rear=-1;//指向队尾}//判断队列是否满public boolean isFull(){return rear==maxSize-1;}//判断队列是否空public boolean isEmpty(){return front==rear;}//添加数据到队列public void addQueue(int n){if(isFull()){System.out.println("队列满,不能加数据");return;}rear++;arr[rear]=n;}//获取队列的数据public int getQueue(){if(isEmpty()){throw new RuntimeException("队列空,不能去数据");}front++;return arr[front];}//显示队列所有数据public void show(){if(isEmpty()){System.out.println("队列空,没有数据");return;}for (int i : arr) {System.out.println(i);}}//显示队列的头数据public int headQueue(){if (isEmpty()){throw new RuntimeException("队列空,没有数据");}return arr[front+1];}}
ArrayQueueDemo
package com.study.queue;import java.util.Scanner;public class ArrayQueueDemo {public static void main(String[] args) {ArrayQueue queue = new ArrayQueue(3);String key=null;Scanner scanner = new Scanner(System.in);boolean loop = true;System.out.println("s(show),显示队列");System.out.println("e(exit),退出程序");System.out.println("a(add),添加数据到队列");System.out.println("g(get),从队列中获取数据");System.out.println("h(head),显示队列头的数据");while(loop){key=scanner.nextLine();switch (key){case "s":queue.show();break;case "a":System.out.println("输入一个数");int value = scanner.nextInt();queue.addQueue(value);break;case "g":try{int res = queue.getQueue();System.out.println("取出的数据是"+res);}catch (Exception e){System.out.println(e.getMessage());}break;case "h":try{int res = queue.headQueue();System.out.println("队列头的数据是"+res);}catch (Exception e){System.out.println(e.getMessage());}break;case "e":scanner.close();loop=false;break;default:break;}}System.out.println("程序退出");}}
2、运行结果

问题:
当front和rear不断的往后移,导致数组满后再删除数据,之后无法在增加数据,也就是说数组模拟出来的队列是一次性的。
解决方法:
通过将数组变成环形数据,问题可以得到解决。
3、总结
队列是一个有序列表,可以用数组或是链表来实现。
遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出
思路分析:
将尾指针往后移:rear+1 , 当front == rear 【空】
若尾指针 rear 小于队列的最大下标 maxSize-1,则将数据存入 rear所指的数组元素中,否则无法存入数据。
rear == maxSize - 1[队列满]
