-
思路导图
-
代码块如下
public class ArrayQueueDemo {
public static void main(String[] args) {
//先新建一个ArrayQueue类
ArrayQueue queue = new ArrayQueue(3);
Scanner scanner = new Scanner(System.in);
char key=' ';//key用来接收用户从键盘输入要添加的数字
boolean loop=true;
while (loop){
System.out.println("有以下菜单供你选择:");
System.out.println("输入 a ,添加数据");
System.out.println("输入 h ,显示头部数据");
System.out.println("输入 e ,退出对队列的编辑");
System.out.println("输入 g ,取出头部数据");
System.out.println("输入 l ,显示所有数据");
key=scanner.next().charAt(0);
switch (key){
case 'a':
System.out.println("请输入你要添加的数字");
int n=scanner.nextInt();
queue.addQueue(n);
break;
case 'h':
try {
queue.HeadQueue();
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 'e':
System.out.println("对队列的编辑已结束");
loop=false;
break;
case 'g':
try {
queue.getQueue();
} catch (Exception e) {
e.printStackTrace();
}
break;
case 'l':
queue.ListQueue();
break;
default:
break;
}
}
}
}
//先定义一个队列类
class ArrayQueue{
private int maxSize;
private int front;
private int real;
private int arr[];
//定义一个构造器,为各项变量赋给初始值
public ArrayQueue(int arrMaxSize) {
this.maxSize = arrMaxSize;
this.arr=new int[maxSize];
real=-1;
front=-1;
}
//定义ArrayQueue中的各种方法
//判断队列是否满了
public boolean isFull(){
return real==maxSize;
}
//判断队列是否为空
public boolean isEmpty(){
return real==front;
}
//向队列添加数据
public void addQueue(int n){
if (isFull()){
System.out.println("队列满了,不能再添加数据了");
}
real++;//尾指针后移
arr[real]=n;
return;
}
//取出队列头部数据
public int getQueue(){
if (isEmpty()){
throw new RuntimeException("队列为空,无数据取出");
}
int Head=arr[real];
real--;//尾指针前移一位
System.out.println("队列的头部数据是"+Head);
return Head;
}
//显示队列的全部数据
public void ListQueue(){
if (isEmpty()){
System.out.println("队列为空,无数据显示");
}
System.out.print("队列的所有数据是:");
for (int i = 0; i < real; i++) {
for (int num:
arr) {
System.out.printf("%d\t",num);
}
}
}
//显示队列对头数据
public int HeadQueue(){
if (isEmpty()){
throw new RuntimeException("队列为空,没有头部数据");
}
int Head=arr[real];
System.out.println("队列的头部数据是"+Head);
return Head;
}
}