import java.util.ArrayList;
import java.util.List;
public class CircularQueue<E> {
private int head;
private int tail;
private E[] data;
private int maxSize;
private int dataSize;
public CircularQueue(int maxSize) {
this.head = 0;
this.tail = 0;
this.maxSize = maxSize+1;
this.dataSize = 0;
this.data = (E[])new Object[maxSize+1];
}
public boolean isEmpty() {
return dataSize == 0;
}
public boolean isFull() {
return dataSize == maxSize-1;
}
public E peek() {
if (dataSize == 0) {
throw new RuntimeException("queue is empty");
}
return data[head];
}
public int size () {
return dataSize;
}
public void offer(E e) {
if (e == null) {
throw new NullPointerException("can not add element is null");
}
if (isFull()) {
throw new RuntimeException("queue is full");
}
data[tail] = e;
tail = (tail+1) % maxSize;
dataSize++;
}
public E poll() {
if (isEmpty()) {
throw new RuntimeException("queue is empty");
}
E ans = data[head];
head = (head+1) % maxSize;
dataSize--;
return ans;
}
public List<E> getAllElement() {
List<E> ans = new ArrayList<>();
if (head <= tail) {
for (int i = head; i < tail; i++) {
ans.add(data[i%maxSize]);
}
} else {
for (int i = head; i < tail+maxSize; i++) {
ans.add(data[i%maxSize]);
}
}
return ans;
}
}
java实现循环队列
最新推荐文章于 2024-08-15 14:47:41 发布