1.队列基本规则
1.先进先出,后进后出
2.用数组表示就是顺序存储,用链表表示就是链式存储
2创建队列
import javax.management.RuntimeMBeanException;
/**
* @author li
*
*使用数组模拟队列
*/
public class ArrQueue {
private int maxSize;//表示数组最大容量
private int front;//队列头
private int rear;//队列尾
private int[] arr;//模拟队列
/*
* 构造器,规定队列大小
*/
public ArrQueue(int arrMaxSize) {
maxSize=arrMaxSize;
arr=new int[maxSize];
//指向队列头的前一个位置,即数组下标0的位置,并不指向队列的数据
front=-1;
//指向队列尾部最后一个数据
rear=-1;
}
/*
* 1.判断队列是否为空
*/
public boolean ifNull() {
return rear==front;
}
/*
* 判断队列是否已满
*/
public boolean ifFull() {
return rear==maxSize-1;
}
/*
* 添加数据到队列
*/
public void addQueue(int n) {
//首先判断队列是否已满
if(ifFull()) {
System.out.println("队列已满,不能加入数据");
return;
}
rear++;//rear后移
arr[rear]=n;//数据入队
}
/*
* 取数据,出队列
*/
public int getQueue() {
//首先判断队列是否为空
if(ifNull()) {
//如果队列为空,手动抛出异常
//throw new RuntimeException("队列为空");
System.out.println("队列为空");
}
front++;
return arr[front];
}
/*
* 显示队列的所有数据
*/
public void showQueue() {
//遍历之前判断队列是否为空
if(ifNull()) {
System.out.println("队列为空,不能显示");
return;
}
//正式遍历
for(int i=0;i<arr.length;i++) {
System.out.printf("arr[%d]=%d",i,arr[i]);
//throw new RuntimeException("队列为空");
}
}
/*
* 显示列表的头数据
*/
public int showHeadQueue() {
//遍历之前判断队列是否为空
if(ifNull()) {
//throw new RuntimeException("队列为空");
System.out.println("队列为空");
}
return arr[front+1];
}
}
3.测试类
package queue;
import java.util.Scanner;
/**
* @author li
*
*/
public class texxt {
public static void main(String[] args) {
//创建数组
ArrQueue arrQueue=new ArrQueue(3);
Scanner scanner=new Scanner(System.in);
boolean loop=true;
int flog;
/*
* 循环打印菜单,依据输入指令调用相应方法
*/
while(loop) {
System.out.println("显示队列请输入1:");
System.out.println("添加数据进队列请输入2:");
System.out.println("从队列取出数据请输入3:");
System.out.println("显示队列头数据请输入4:");
System.out.println("退出请输入5:");
flog=scanner.nextInt();
switch(flog) {
case 1:
arrQueue.showQueue();
break;
case 2:
System.out.println("输入数据:");
int data=scanner.nextInt();
arrQueue.addQueue(data);
break;
case 3:
System.out.println(arrQueue.getQueue());
break;
case 4:
System.out.println(arrQueue.showHeadQueue());
break;
case 5:
scanner.close();
loop=false;
break;
default:
break;
}
}
System.out.println("退出成功");
}
}
4.效果展示