定义上层接口
package org.example.datastructure.queue;
public interface Queue<T> {
/**
* 向队尾插入元素
*
* @return
*/
boolean offer(T value);
/**
* 从队头获取值,并移除
* 队为空返回null
*
* @return
*/
T poll();
/**
* 从队头获取值,不移除
* 栈为空返回null
*
* @return
*/
T peek();
/**
* 判断队是否为空
*
* @return
*/
boolean isEmpty();
/**
* 判断队是否满了
*
* @return
*/
boolean isFull();
}
接口基础版实现类
package org.example.datastructure.queue;
import java.util.Iterator;
/**
* 环形数组
*/
public class ArrayQueue<T> implements Queue<T>, Iterable<T> {
private T[] array; //数组
private int head = 0; //头指针
private int tail = 0; //尾指针
private int size = 0; //队列元素个数
public ArrayQueue(int capacity) {
this.array = (T[]) new Object[capacity];
}
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
int p = head;
int count = 0;
@Override
public boolean hasNext() {
return count < size;
}
@Override
public T next() {
T value = array[p];
p = (p + 1) % array.length;
count++;
return value;
}
};
}
@Override
public boolean offer(T value) {
if (isFull()) {
throw new IndexOutOfBoundsException();
}
array[tail] = value;
tail = (tail + 1) % array.length;
size++;
return true;
}
@Override
public T poll() {
if (isEmpty()) {
return null;
}
T value = array[head];
head = (head + 1) % array.length;
size--;
return value;
}
@Override
public T peek() {
if (isEmpty()) {
return null;
}
return array[head];
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public boolean isFull() {
return size == array.length;
}
}