package dL;
import java.nio.Buffer;
import java.util.Scanner;
public class arrayQueueDemo {
public static void main (String[] args) {
//创建一个队列
ArrayQueue arrayQueue=new ArrayQueue(3);
char key=' ';//接受用户输入
Scanner scanner =new Scanner(System.in);
boolean loop=true;
//输出一个菜单
while (loop){
System.out.printf("s(show):显示队列");
System.out.printf("e(exit):退出程序");
System.out.printf("a(add):添加数据");
System.out.printf("g(get):取出数据");
System.out.printf("h(head):查看队列头");
key=scanner.next().charAt(0);//接受一个字符
switch (key){
case 's':
arrayQueue.showQueue();
break;
case 'a':
try {
System.out.printf("输出一个数");
int value=scanner.nextInt();
arrayQueue.addQueue(value);
}catch (Exception e){
System.out.printf(e.getMessage());
}
break;
case 'g':
try {
int res=arrayQueue.getQueue();
System.out.printf("取出的数据是%d\n",res);
}catch (Exception e){
System.out.printf(e.getMessage());
}
break;
case 'h'://查看队列头
try {
int res=arrayQueue.headQueue();
System.out.printf("队列头的数据是%d\n",res);
}catch (Exception e){
System.out.printf(e.getMessage());
}
break;
case 'e':
scanner.close();
loop=false;
break;
default:
break;
}
System.out.printf("程序退出");
}
}
}
// 使用数组模拟队列,编写一个arrayQueue类;
class ArrayQueue{
private int maxSize;//数组最大容量
private int fornt;//队列头
private int rear;
private int[] arr;//用来存放数据
//创建队列的构造器
public ArrayQueue(int arrMaxSize){
maxSize=arrMaxSize;
arr=new int[maxSize];
fornt=-1;//指向队列头部,前一个位置 分析出
rear=-1;//指向队列尾部的具体数据(就是队列最后一个数据)
}
public boolean isFull(){
return rear==maxSize-1;
}
public boolean isEmpty()
{
return rear==fornt;
}
public void addQueue(int n){
if (isFull()){
System.out.println("队列满,不能加入");
}
rear++;
arr[rear]=n;
}
public int getQueue()
{
//判断是否为空
if (isEmpty()){
//通过抛出异常
throw new RuntimeException("队列为空,不能取数据");
}
fornt++;
return arr[fornt];
}
//显示队列数据
public void showQueue(){
if (isEmpty()){
System.out.println("队列空");
}
for (int i=0;i< arr.length;i++){
System.out.printf("arr[%d]=%d\n",i,arr[i]);
}
}
//显示队列头部,不是取出数据;
public int headQueue(){
if (isEmpty()){
System.out.printf("队列空没有数据");
throw new RuntimeException("队列为空,不能取数据");
}
return arr[fornt+1];
}
}
有一个缺点就是这个数组只能用一次,可以改进成一个环形队实现数组复用