队列是一个有序表,可以用数组或是链表来实现。
遵循先进先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出
示意图:(使用数组模拟队列示意图)
front为指向队首的指针,rear为指向队尾的指针。因为队列的输出、输入分别从前后端来处理,因此需要两个变量front和rear分别记录队列前后端的下标,front会随着数据输出而改变,而rear则是随着数据输入而改变。
代码实现:
public class ArrayQueueDemo {
public static void main(String[] args) {
ArrayQueue arrayQueue=new ArrayQueue(4);
//arrayQueue.addQueue(2);
//arrayQueue.addQueue(3);
System.out.println(arrayQueue.isEmpty());
System.out.println(arrayQueue.isFull());
arrayQueue.showQueue();
System.out.println(arrayQueue.getQueue());;
}
}
class ArrayQueue{
private int maxSize;//数组最大容量
private int front;//队列头
private int rear;//队列尾
private int[] arr;//该数组用于存放数据,模拟队列
//创建队列的构造方法
public ArrayQueue(int arrMaxSize){
maxSize=arrMaxSize;
arr=new int[maxSize];
front=-1;
rear=-1;
}
//判断队列是否满
public boolean isFull(){
return rear==maxSize;
}
//判断队列是否为空
public boolean isEmpty(){
return rear==front;
}
//添加数据到队列
public void addQueue(int n){
//先判断队列是否已经满了
if(isFull()){
System.out.println("队列已满,不能添加数据");
return;
}
rear++;//让rear后移
arr[rear]=n;
}
//获取队列数据,出队列
public int getQueue(){
//判断队列是否为空
if(isEmpty()){
System.out.println("队列为空,不能取数据");
return 0;
}
front++;
return arr[front];
}
//显示队列所有数据
public void showQueue(){
//遍历
if(isEmpty()){
System.out.println("队列空,没有数据");
return;
}
for(int i=0;i
问题分析:
1)目前数组使用一次就不能用,没有达到复用的效果
2)可以使用算法,改进成一个环形的队列(后续会更新)



