队列是一种先入先出的数据结构,就像排队买东西,队头在柜台向店员买东西,队尾不断有人来加入队列,一边出一边进。
在Java中本来就有队列,也有很多数据结构可以来模拟队列
但我们常用的不是简单的队列而是循环队列,我们用head队头指针来确定队头,rear队尾指针来确定队尾。
循环队列长度:(rear-head+queuelength)%queuelength
循环队列判断队列空:rear == head
循环队列判断队列满:(rear+1)%queuelength == head
下面我是我用数组模拟循环队列的实现:
public class MyCircularQueue {
int[] arr;
int queuelength;
int start;
int end;
//初始化函数
public MyCircularQueue(int k){
arr = new int[k];
queuelength = k;
start = -1;
end = -1;
}
//入队函数
public boolean enQueue(int value){
//判断是否队列已满
if(isFull()){
return false;
}
if(start==-1){
start++;
}
arr[(end+1)%queuelength]=value;
end++;
return true;
}
//出队函数
public boolean deQueue(){
//判断是否队列空
if(isEmpty()){
return false;
}
if(start==end){
start=-1;
end=-1;
}else{
start++;
}
return true;
}
//查看队头元素
public int Front(){
if(isEmpty()){
return -1;
}
return arr[start%queuelength];
}
//查看队尾元素
public int Rear(){
if(isEmpty()){
return -1;
}
return arr[end%queuelength];
}
//判断队列空
public boolean isEmpty(){
return start==-1;
}
//判断队列满
public boolean isFull(){
if((end+1)%queuelength==start%queuelength){
return true;
}
return false;
}
}