数组模拟队列
package algorithm.queue;
import java.util.Scanner;
public class ArrayQueueDemo {
public static void main(String[] args) {
System.out.println("测试队列");
ArrayQueue queue = new ArrayQueue(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 ArrayQueue{
private int front;
private int rear;
private int[] arr;
private int maxSize;
public ArrayQueue(int maxSize) {
this.maxSize = maxSize;
arr = new int[maxSize];
front = -1;
rear = -1;
}
public boolean isFull() {
return rear == maxSize-1;
}
public boolean isEmpty() {
return front == rear;
}
public void addElem(int elem) {
if (isFull()) {
throw new RuntimeException("队列满");
}
rear++;
arr[rear] = elem;
}
public int getElem() {
if (isEmpty()) {
throw new RuntimeException("队列空");
}
front++;
return arr[front];
}
public void show() {
if (isEmpty()) {
System.out.println("队列空");
return;
}
for (int i =0; i <arr.length; i++) {
System.out.printf("arr[%d] = %d\t",i,arr[i]);
}
}
public int showHead() {
if (isEmpty()) {
throw new RuntimeException("队列空");
}
int value = arr[++front];
front--;
return value;
}
}