队列的性质:先进先出。也就是说从队列的头部进数据。从队列的尾部数据。只要 我们使用两个索引下标front和tail分别用于指向队列的头部和尾部。只要我们添加数据和删除数据移动相应的索引下标就行。
/*
* 使用数组实现循环队列
*/
public class ArrarImplyQueue {
//底层数组
private Object[] arr;
//用于指向队列头部
private int front;
//用于指向队列尾部
private int tail;
//数组的默认大小为10
public ArrarImplyQueue(){
this(10);
}
//使用自定义大小
public ArrarImplyQueue(int size){
arr = new Object[size];
front = 0;
tail = 0;
}
//进入队列
public boolean add(Object obj){
//当队列的对头索引值和队尾索引值相等时返回false
if((tail+1)%arr.length == front){
return false;
}
arr[tail] = obj;
//如果下标索引超出数组的长度则从数组的起始位置重新开始
tail = (tail+1)%arr.length;
return true;
}
//出队列
public Object remove(){
//如果下标索引超出数组的长度则返回null
if (front == tail){
return null;
}
//即将出队列的值保存到临时变量obj中
Object obj = arr[front];
//数据出队列将下标索引值移动
front = (front+1)%arr.length;
return obj;
}
public static void main(String[] args) {
ArrarImplyQueue queue = new ArrarImplyQueue();
queue.add("第一");
queue.add("第二");
System.out.println(queue.remove());
System.out.println(queue.remove());
}
}