循环队列
package algorithm.queue;
import java.util.Scanner;
public class CircleArrayQueueDemo {
public static void main(String[] args) {
System.out.println("测试队列");
CircleArrayQueue queue = new CircleArrayQueue(3);
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("s(show): 显示所有队列数据");
System.out.println("a(add): 添加到队列数据");
System.out.println("g(get): 从队列中取数据");
System.out.println("h(head): 显示队列头个数据");
System.out.println("e(exit): 退出");
String next = sc.next();
switch(next) {
case "s":
queue.show();
System.out.println();
break;
case "a":
System.out.println("输入添加的数据");
int elem = sc.nextInt();
try {
queue.addElem(elem);
} catch (Exception e1) {
System.out.println("操作失败,原因:"+e1.getMessage());
break;
}
System.out.println("操作成功");
break;
case "g":
try {
System.out.println("取出数据为:"+queue.getElem());
}catch(Exception e) {
System.out.println("操作失败,原因:"+e.getMessage());
}
break;
case "h":
try {
System.out.println("队列中头数据为:"+queue.showHead());
}catch(Exception e) {
System.out.println(e.getMessage());
}
break;
case "e":
sc.close();
System.out.println("bye-bye");
return;
default:
System.out.println("输入错误!");
}
}
}
}
class CircleArrayQueue{
private int front;
private int rear;
private int[] arr;
private int maxSize;
public CircleArrayQueue(int maxSize) {
this.maxSize = maxSize;
arr = new int[maxSize];
}
public boolean isFull() {
return (rear + 1) % maxSize == front;
}
public boolean isEmpty() {
return front == rear;
}
public int showHead() {
if (isEmpty()) {
throw new RuntimeException("空");
}
int val = arr[front];
return val;
}
public int getElem() {
if (isEmpty()) {
throw new RuntimeException("空");
}
int val = arr[front];
front = (front + 1) % maxSize;
return val;
}
public void addElem(int elem) {
if (isFull()) {
throw new RuntimeException("满");
}
arr[rear] = elem;
rear = (rear + 1) % maxSize ;
}
public void show() {
if (isEmpty()) {
System.out.println("空");
return;
}
for (int i = front; i <front + size(); i++) {
System.out.printf("arr[%d] = %d\t",i%maxSize,arr[i%maxSize]);
}
}
public int size() {
return (rear - front + maxSize) % maxSize;
}
}