一、使用场景
银行排队,政务大厅排队(排队取号)
二、队列定义
1、队列是一个有序列表,可以用数组或是链表来实现
2、先入先出原则,即:先存入的数据先取出,后存入的数据后取出
3、队列示意
三、数组模拟队列
代码实现
//数组模拟队列
class Queue{
private int maxSize;//数组容量
private int front;//队列头
private int rear;//队列尾
private int[] Array;//存放数据,模拟队列
//创建queue类的构造器
public Queue(int arrMaxSize) {
maxSize = arrMaxSize;//数组的最大长度
Array=new int[maxSize];
front=-1;//指向队列头部,front是指队列头的前一个位置
rear=-1;//指向队列尾部,rear是值队列的尾部
}
//判满
public boolean isFull(){
return rear==maxSize-1;
}
//判空
public boolean isEmpty(){
return rear==front;
}
//添加数据到队列(入队)
public void addQueue(int data){
//判满
if(isFull()){
return;
}
rear++;//rear后移,数据入队
Array[rear]=data;
}
//获取队列数据(出队)
public int getQueue(){
//判空(没有数据当然出不了队)
if(isEmpty()){
//抛出异常
throw new RuntimeException("队列为空");
}
front++;//头指正向后移,取数据
return Array[front++];
}
//显示队列所有数据
public void showQueue(){
//判空
if(isEmpty()){
System.out.println("队列为空");
return;
}
//遍历
for (int i = 0; i <Array.length ; i++) {
System.out.printf("arr[%d]=%d\n",i,Array[i]);
}
}
//显示队列头数据(队列的第一个数据)
public int headQueue(){
//判空
if(isEmpty()){
throw new RuntimeException("队列为空");
}
return Array[front+1];
}
}
四、 队列实现思路
/**
* 队列思路分析
* 1、创建一个使用数组模拟队列的类
* 1.1定义maxsize 表示数组的最大容量
* 1.2定义front 表示队列头
* 1.3定义rear 表示队列尾巴
* 1.4定以int型数组arr 用于存放数据
* 2、创建队列的构造器
* 1.1front=-1;指向队列头部
* 1.2rear=-1;指向队列尾部
* 3、判满
* 4、判空
* 5、编写添加数据的方法,入队列
* 6、编写获取数据的方法,出队列
* 7、编写显示队列所有数据的方法
* 8、编写显示头数据的方法
*/