修改上一篇的队列,修改为循环队列
package test12;
/**
* Created by mlink on 2017/3/16.
*/
public class Queue {
private long[] arr;
private int maxSize;//最大空间
private int elems;//有效元素大小
private int font ;//队头
private int end ;//队尾
public Queue(int maxSize){
this.maxSize =maxSize;
arr = new long[maxSize];
elems =0;
font =0;
end = -1;
}
//插入数据
public void insert(long value){
if(end==maxSize-1){
end = -1;
}
arr[++end]= value;
elems++;
}
//移除数据
public long remove(){
long temp = arr[font++];
if(font ==maxSize){
font =0;
}
elems--;
return temp;
}
//是否为空
public boolean isEmpty(){
return (elems==0);
}
//是否满了
public boolean isFull(){
return (elems==maxSize);
}
//返回有效数字大小
public int size(){
return elems;
}
}
然后测试就不会报错了:
package test12;
/**
* Created by mlink on 2017/3/17.
*/
public class Test {
public static void main(String[] args) {
Queue qu= new Queue(5);
System.out.println(qu.isEmpty());
qu.insert(50);
qu.insert(40);
qu.insert(30);
qu.insert(20);
qu.insert(10);
System.out.println(qu.isEmpty());
System.out.println(qu.isFull());
while (!qu.isEmpty()){
long temp = qu.remove();
System.out.print(temp+" ");
}
qu.insert(50);
qu.insert(40);
qu.insert(30);
qu.insert(20);
qu.insert(10);
System.out.println(qu.isEmpty());
System.out.println(qu.isFull());
while (!qu.isEmpty()){
long temp = qu.remove();
System.out.print(temp+" ");
}
}
}