public class ArrayQueueDemo { public static void main(String[] args) { ArrayQueue queue = new ArrayQueue(3); Scanner scanner = new Scanner(System.in); while (true){ System.out.println("a:添加数据 "); System.out.println("b:取出数据 "); System.out.println("c:打印数据 "); System.out.println("d:返回头数据 "); System.out.println("e:终止程序 "); System.out.println("请输入一个字符:"); String next = scanner.next(); switch (next){ case "a" : System.out.println("请输入一个整数:"); int num = scanner.nextInt(); queue.add(num); break; case "b" : int result = queue.remove(); System.out.println("取出的数为:"+result); break; case "c" : queue.print(); break; case "d" : int head = queue.head(); System.out.println("头部的数据为:"+head); break; case "e" : System.out.println("程序终止"); scanner.close(); System.exit(1); default: System.out.println("无法识别该指令"); } } } } class ArrayQueue { private int front; //指向数组头部 private int rear; //指向数组尾部 private int maxSize; //数组容量 private int[] arr; public ArrayQueue(int maxSize) { this.maxSize = maxSize; this.arr = new int[maxSize]; this.front = 0; this.rear = 0; } public boolean isFull() { return rear == maxSize; } public boolean isEmpty() { return rear == front; } //插数据 public void add(int num){ if (isFull()){ System.out.println("队列已满....."); return; } arr[rear] = num; rear++; } //取数据 public int remove(){ if(isEmpty()){ throw new RuntimeException("队列为空...."); } int num = arr[front]; front++; return num; } //打印 public void print(){ if(isEmpty()){ System.out.println("队列为空...."); return; } for(int i=0;i<arr.length;i++){ System.out.println("arr["+i+"]="+arr[i]); } System.out.println("----------"); } //返回头数据 public int head(){ if (isEmpty()){ throw new RuntimeException("队列为空...."); } return arr[front]; } }
以上代码存在一个缺陷,添加3个元素之后,移除了头部元素还是不能继续添加,所以将队列改成环形队列
public class CircleArrayQueueDemo { public static void main(String[] args) { { CicleArrayQueue queue = new CicleArrayQueue(4); Scanner scanner = new Scanner(System.in); while (true){ System.out.println("a:添加数据 "); System.out.println("b:取出数据 "); System.out.println("c:打印数据 "); System.out.println("d:返回头数据 "); System.out.println("e:终止程序 "); System.out.println("请输入一个字符:"); String next = scanner.next(); switch (next){ case "a" : System.out.println("请输入一个整数:"); int num = scanner.nextInt(); queue.add(num); break; case "b" : int result = queue.remove(); System.out.println("取出的数为:"+result); break; case "c" : queue.print(); break; case "d" : int head = queue.head(); System.out.println("头部的数据为:"+head); break; case "e" : System.out.println("程序终止"); scanner.close(); System.exit(1); default: System.out.println("无法识别该指令"); } } } } } class CicleArrayQueue { private int front; //指向数组头部 private int rear; //指向数组尾部 private int maxSize; //数组容量 private int[] arr; public CicleArrayQueue(int maxSize) { this.maxSize = maxSize; this.arr = new int[maxSize]; this.front = 0; this.rear = 0; } //约定好留一个空位,否则实现不了 public boolean isFull() { return (rear+1) % maxSize == front; } public boolean isEmpty() { return rear == front; } //插数据 public void add(int num) { if (isFull()) { System.out.println("队列已满....."); return; } arr[rear] = num; rear = (rear + 1) % maxSize; } //取数据 public int remove() { if (isEmpty()) { throw new RuntimeException("队列为空...."); } int num = arr[front]; front = (front + 1) % maxSize; return num; } //从front头部开始打印 public void print() { if (isEmpty()) { System.out.println("队列为空...."); return; } for (int i = front; i < front + size(); i++) { System.out.println("arr[" + i % maxSize + "]=" + arr[i % maxSize]); } System.out.println("----------"); } //返回元素的个数 public int size() { return (rear + maxSize - front) % maxSize; } //返回头数据 public int head() { if (isEmpty()) { throw new RuntimeException("队列为空...."); } return arr[front]; } }