1用数组实现队列
2循环队列
3变量:队头指针,队尾指针,一维数组
注意点:
1、判断队列为空
front == rear
2、判断队列为满
(rear + 1)% maxsize == front
3、入队
int[rear] = value(需要根据队尾指针指向的位置决定)<rear++>
4、出队
value = int[front];
int[front] = 0;置为0
front++;
5、显示队列
循环队列的输出,通过剩余的几个进行输出才能够达到想要的效果
for (int i = front; i < array.length+front; i++) {
System.out.printf("array[%d] = %d\n", i%maxSize, array[i%maxSize]);
}
package QueueDemo;
import java.util.Scanner;
/*
数组队列
*/
public class ArrayQueue {
public static void main(String[] args) {
ArrayQueueDemo arrayQueueDemo = new ArrayQueueDemo(5);
Scanner scanner = new Scanner(System.in);
int j;
String s;
while (true) {
if (arrayQueueDemo.isFull()) {
System.out.println("队列已满, 请等待");
}
// 判断是出队还是入队
System.out.println("请选择入队(add) 出队(get) 退出程序(exit):");
s = scanner.next();
if ("add".equals(s)) {
System.out.println("请输入需要入队的数字:");
j = scanner.nextInt();
if (j == -1) {
break;
}
arrayQueueDemo.addQueue(j);
arrayQueueDemo.show();
} else if ("get".equals(s)) {
if (arrayQueueDemo.isEmpty()) {
arrayQueueDemo.getQueue();
}
System.out.print("出队元素为:");
System.out.println(arrayQueueDemo.getQueue());
arrayQueueDemo.show();
} else if ("exit".equals(s)) {
System.exit(0);
}else{
System.out.println("无法识别命令,请重新输入");
continue;
}
}
}
}
// 创建一个用数组实现的队列
class ArrayQueueDemo {
private int maxSize; // 数组最大长度
private int front; // 队列头指针
private int rear; // 队尾指针
private int[] array; // 数组
// 队列构造器
public ArrayQueueDemo(int max) {
maxSize = max; // 显示数组的长度
front = 0; // 队头指针指向头部的前一个位置
rear = 0; // 队尾指针指向尾部的前一个位置
array = 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;
}
rear = (rear + 1) % maxSize;
array[rear] = n;
System.out.println("入队成功");
}
// 队头取元素
public int getQueue() {
// 判断队列是否为空
if (isEmpty()) {
throw new RuntimeException("队列为空");
}
front = (front + 1) % maxSize;
int value = array[front];
array[front]=0;
return value;
}
// 显示队列元素
public void show() {
System.out.println("当前的队列情况为:");
for (int i = front; i < array.length+front; i++) {
System.out.printf("array[%d] = %d\n", i%maxSize, array[i%maxSize]);
}
}
// 显示头部数据
public int headQueue() {
// 判断队列是否为空
if (isEmpty()) {
throw new RuntimeException("队列为空");
}
return array[front + 1];
}
}