JAVA 实现数组模拟队列
实现:入队,出队,显示队头元素,显示队列功能
package zc;
import java.util.Scanner;
/**
* 数组模拟实现队列
* 缺点:数组只能用一次
* @author D
*
*/
public class ArrayQueueTest {
public static void main(String [] args) {
ArrayQueue aq=new ArrayQueue(5);
char key=' '; //接受用户输入
boolean flag=true;
Scanner scan=new Scanner(System.in);
while(flag) {
System.out.println("s(show):显示队列");
System.out.println("a(add):入队");
System.out.println("p(pop):出队");
System.out.println("h(head):显示队列头");
System.out.println("e(exit):退出程序");
key=scan.next().charAt(0);
switch(key) {
case 's':
aq.showQueue();
break;
case 'a':
System.out.println("输入要添加的数据");
int value=scan.nextInt();
aq.add(value);
break;
case 'p':
try {
int val=aq.pop();
System.out.println("出队数据为:"+val);
}catch(Exception e){
System.out.println(e.getMessage());
}
break;
case 'h':
try {
int head=aq.head();
System.out.println("队头数据为:"+head);
}catch(Exception e){
System.out.println(e.getMessage());
}
break;
case 'e':
flag=false;
break;
default:
System.out.println("输入错误,请重新输入");
}
}
System.out.println("程序退出");
}
}
class ArrayQueue{
private int maxSize; //数组最大存储容量
private int front=-1; //队列头指针
private int rear=-1; //队列尾指针
private int[] arr;
public ArrayQueue(int maxSize) {
super();
this.maxSize = maxSize;
arr=new int[maxSize];
}
//判断队列是否为空
public boolean isEmpty() {
return rear==front;
}
//判断队列是否已满
public boolean isFull() {
return rear==maxSize-1;
}
//入队
public void add(int ele) {
if(isFull()) {
System.out.println("队列已满,不能添加数据");
return;
}
rear++;
arr[rear]=ele;
}
//出队
public int pop() {
if(isEmpty()) {
throw new RuntimeException("队列为空");
}
front++;
return arr[front];
}
//显示数组中的元素
public void showQueue() {
if(isEmpty()) {
System.out.println("队列为空,无元素");
return;
}
StringBuilder sb=new StringBuilder();
sb.append("[");
for(int i=0;i<arr.length;i++) {
sb.append(arr[i]+",");
}
sb.setCharAt(sb.length()-1, ']');
System.out.println(sb);
}
//显示队列头数据
public int head() {
if(isEmpty()) {
throw new RuntimeException("队列为空");
}
return arr[front+1];
}
}