Queue 队列
队列
队列是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

队列主要操作
- 入队
- 出队
- 是否为空队列
- 清空队列
- 查看头队列
- 返回队列长度
顺序队列
private int front;
private int rear;
private int maxsize;
private Object[] obj = null;
/**
* 初始化大小
* @param maxsize
*/
Dueue(int maxsize) {
if (maxsize <= 0) {
throw new RuntimeException("数组大小不能小于0");
}
this.maxsize = maxsize;
obj = new Object[maxsize];
}
/**
* 添加队列
* @param o
* @return
*/
public boolean add(E o) {
if (isFull()) {
throw new RuntimeException("full");
}
obj[rear++] = o;
return true;
}
/**
* 队列是否为满
* @return
*/
public boolean isFull() {
return rear == maxsize;
}
/**
* 队列是否为空
* @return
*/
public boolean isEmpty() {
return rear == front;
}
/**
* 查看头元素
* @return
*/
public E peek() {
if (isEmpty()) {
throw new RuntimeException("null dueue");
}
return (E) obj[front];
}
/**
* 出队,删除元素
* @return
*/
public E poll() {
if (isEmpty()) {
throw new RuntimeException("null dueue");
}
E value = (E) obj[front];
obj[front++] = null;
return value;
}
/**
* 队列大小
* @return
*/
public int size() {
return rear - front;
}
循环队列
private int front;
private int rear;
private int maxsize;
private int size;
private Object[] data = null;
public Dueue(int size){
if(size>=0){
throw new RuntimeException("初始化大小不能小于0");
}
maxsize=size;
data=new Object[size];
}
public void add(E e){
if(isFull())
throw new RuntimeException("full");
data[rear] = e;
rear = (rear + 1)%maxsize;
size++;
}
public boolean isFull(){
return size==maxsize;
}
public int size(){
return size;
}
public boolean empty(){
return size==0;
}
public E peek(){
if(empty())
throw new RuntimeException("null");
return (E) data[front];
}
public E poll(){
if(empty())
throw new RuntimeException("null");
E value = (E) data[front];
data[front] = null;
front = (front+1)%maxsize;
size--;
return value;
}
public void clear(){
Arrays.fill(data, null);
size = 0;
front = 0;
rear = 0;
}

浙公网安备 33010602011771号