ArrayQueueLoop
package 队列;
public class ArrayQueueLoop<E> implements Queue<E> {
E[] data;
int front;
int rear;
int size;
public ArrayQueueLoop() {
this(10);
}
public ArrayQueueLoop(int capacity) {
data =(E[]) new Object[capacity];
size=0;
front=0;
rear=0;
}
@Override
public String toString() {
if(isEmpty()) {
return "[]";
}
StringBuilder sb=new StringBuilder("[");
for(int i=front;i!=rear;i=(i+1)%data.length){
if((i+1)%data.length==rear){
sb.append(data[i]+"]");
}else{
sb.append(data[i]+",");
}
}
return sb.toString();
}
@Override
public int getSize() {
return this.size;
}
@Override
public boolean isEmpty() {
return getSize()==0;
}
@Override
public void enqueue(E e) {
if((rear+1)%data.length==front) {
throw new IllegalArgumentException("队列已满");
}
data[rear]=e;
rear=(rear+1)%data.length;
size++;
}
@Override
public E dequeue() {
if(front==rear) {
throw new IllegalArgumentException("队列为空");
}
E flag=data[front];
front=(front+1)%data.length;
size--;
return flag;
}
@Override
public E getFront() {
if(isEmpty()) {
throw new IllegalArgumentException("队列为空");
}
return data[front];
}
@Override
public E getRear() {
if(isEmpty()) {
throw new IllegalArgumentException("队列为空");
}
if(rear==0) {
return data[data.length-1];
}
return data[rear-1];
}
@Override
public void clear() {
front=0;
rear=0;
size=0;
}
}
测试
package 队列;
public class TestArrayQueueLoop {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayQueueLoop<Integer> loop=new ArrayQueueLoop<>(20);
System.out.println(loop);
loop.enqueue(888);
loop.dequeue();
loop.enqueue(888);
loop.enqueue(85);
loop.enqueue(18);
loop.enqueue(545);
System.out.println(loop.getFront());
System.out.println(loop);
}
}
测试结果
[]
888
[888,85,18,545]