作者:yantian | 来源:互联网 | 2023-09-17 12:30
非循环循环队列
- 判满:(rear+1) % maxsize == front
- 判空:frOnt== rear
- 队列元素个数:rear = (rear + maxsize - front) % maxsize
- front 指针移动方式:frOnt= (front + 1) % maxsize
- rear指针移动方式:rear= (rear+ 1) % maxsize
import java.awt.Font;
import java.util.Scanner;
import javax.management.RuntimeErrorException;public class CircleArrayQueueDemo {public static void main(String[] args) {CircleArrayQueue circleArrayQueue = new CircleArrayQueue(4);char key = ' ';Scanner scanner = new Scanner(System.in);boolean loop = true;while(loop) {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):查看队列头的数据");key = scanner.next().charAt(0);switch (key) {case 's':circleArrayQueue.showQueue();break;case 'e':circleArrayQueue.showQueue();break;case 'a':System.out.println("输入一个数");int value = scanner.nextInt();circleArrayQueue.addQueue(value);break;case 'g':try {int res = circleArrayQueue.getQueue();System.out.printf("取出的数据是%d\n",res);}catch (Exception e) {System.out.println(e.getMessage());}break;case 'h':try {int res = circleArrayQueue.headQueue();System.out.printf("队列头的数据是%d\n",res);}catch (Exception e) {System.out.println(e.getMessage());}break;default:scanner.close();loop = false;break;}}System.out.println("程序退出");}}
class CircleArrayQueue{private int maxsize;private int front;private int rear;private int[] arr;public CircleArrayQueue(int arrmaxsize) {maxsize = arrmaxsize;front = 0;rear = 0;arr = new int[maxsize];}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 + 1) % maxsize;}public int getQueue() {if(isEmpty()) {throw new RuntimeException("队列为空,不可取出元素!");}int value = arr[front];front = (front + 1)%maxsize;return value;}public void showQueue() {if(isEmpty()) {System.out.println("队列为空!");return;}for(int i = front; i < front + size(); i++) {System.out.printf("arr[%d]=%d\n",i % maxsize, arr[i % maxsize]);}}public int size() {return (rear + maxsize - front) % maxsize;}public int headQueue() {if(isEmpty()) {throw new RuntimeException("队列为空,不可取出元素!");}return arr[front];}
}
结果示意图
循环队列
- 判满:(rear+1) % maxsize == front
- 判空:frOnt== rear
- 队列元素个数:rear = (rear + maxsize - front) % maxsize
- front 指针移动方式:frOnt= (front + 1) % maxsize
- rear指针移动方式:rear= (rear+ 1) % maxsize
import java.awt.Font;
import java.util.Scanner;
import javax.management.RuntimeErrorException;public class CircleArrayQueueDemo {public static void main(String[] args) {CircleArrayQueue circleArrayQueue = new CircleArrayQueue(4);char key = &#39; &#39;;Scanner scanner = new Scanner(System.in);boolean loop = true;while(loop) {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):查看队列头的数据");key = scanner.next().charAt(0);switch (key) {case &#39;s&#39;:circleArrayQueue.showQueue();break;case &#39;e&#39;:circleArrayQueue.showQueue();break;case &#39;a&#39;:System.out.println("输入一个数");int value = scanner.nextInt();circleArrayQueue.addQueue(value);break;case &#39;g&#39;:try {int res = circleArrayQueue.getQueue();System.out.printf("取出的数据是%d\n",res);}catch (Exception e) {System.out.println(e.getMessage());}break;case &#39;h&#39;:try {int res = circleArrayQueue.headQueue();System.out.printf("队列头的数据是%d\n",res);}catch (Exception e) {System.out.println(e.getMessage());}break;default:scanner.close();loop = false;break;}}System.out.println("程序退出");}}
class CircleArrayQueue{private int maxsize;private int front;private int rear;private int[] arr;public CircleArrayQueue(int arrmaxsize) {maxsize = arrmaxsize;front = 0;rear = 0;arr = new int[maxsize];}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 + 1) % maxsize;}public int getQueue() {if(isEmpty()) {throw new RuntimeException("队列为空,不可取出元素!");}int value = arr[front];front = (front + 1)%maxsize;return value;}public void showQueue() {if(isEmpty()) {System.out.println("队列为空!");return;}for(int i = front; i < front + size(); i++) {System.out.printf("arr[%d]=%d\n",i % maxsize, arr[i % maxsize]);}}public int size() {return (rear + maxsize - front) % maxsize;}public int headQueue() {if(isEmpty()) {throw new RuntimeException("队列为空,不可取出元素!");}return arr[front];}
}
结果示意图