java算法,队列为空和已满?

来源:百度知道 编辑:UC知道 时间:2024/06/07 21:59:42
下面代码中,为空和已满,什么意思?为什么那么表示?
public class Queue {

private int maxSize;
private long[] queArray;
private int front;
private int rear;

public Queue(int s){

maxSize=s+1;
queArray=new long[maxSize];
front=0;
rear=-1;

}

public void insert(long j){
if(rear==(maxSize-1))
rear=-1;
queArray[++rear]=j;

}

public long remove(){
if(front==maxSize-1)
front=0;
return queArray[front++];
}

public long peek(){
return queArray[front];
}

public boolean isEmpty(){
return (rear+1==front)||(front+maxSize-1==rear);
}

public boolean isFull(){
return (rear+2==front)||(front+maxSize-2==rear);;
}

public int size(){
return nItems;
}

}
ps:我想问问,怎么保持始终有一个为空,插入时,不都插进去了吗?也没有空值呀!

==========================应你所邀前来作答============================
显然这是个循环队列。循环队列除了普通队列的FIFO特点以外,还有已经出队列后空闲的空间可以再次利用存储后续数据。
但因为有这个特点,根据进队列和出队列的次序,会产生这样的情况:队列空时和队列满时,队列首尾指针rear、front情况完全相同。所以,无法直接判断队列空还是满。
解决方法有两种:
一种是额外设置一个booean型变量,标识是否是空。
进队列时,将它置为true。出队列时,如发生上面指针情况,将它置false。
那么检查队列空或满就是对这个辅助变量与指针情况共同判断。
另一种方法是永远保留一个空闲位置。这样空和满的时候,两个指针的情况就不一样了。
你的这个程序是后一种处理方式。
至于将指针情况定义为什么关系表示空满,各人有各人的方法。
看一下我做的循环队列类,稍有变化。
public class Quque{
private capacity,front,rear;
private long[] data;
public Queue(int size){
capacity=size+1;
data=new long[capacity];
front=rear=0;
}
public void enQueue(long value){
if((rear+1)%capacity==front){
throw new Exception("队列满");
}
data[rear++]=value;
rear%=capacity;
}
public long deQueue(){
if(rear==front){