转载请标明出处:
http://blog.csdn.net/mr_lawen/article/details/52240664
队列(Queue)是先进先出的线性存储结构,在队首删除元素,在队尾插入元素。
而循环队列更好的利用了队列的存储空间,当插入到队尾时,如果队首元素已经出队,则从队首接着插入。
front:队头指针
rear队:尾指针
队列为空时:front == rear
队列为满时:(rear + 1) % maxSize = front
循环队列的长度为:(rear - front + maxSize) % maxSize
下面看代码
public class Queue {
private int maxSize;
private int array[];
private int front;
private int rear;
public Queue(int maxSize) {
this.maxSize = maxSize;
array = new int[maxSize];
front = 0;
rear = 0;
}
//进队
public boolean insert(int e) {
if((rear + 1) % maxSize == front) //队列满
return false;
array[rear] = e;
rear = (rear + 1) % maxSize;
return true;
}
//出队
public int remove() {
if (rear == front) {
return 0; //队列空
}
int e = array[front];
front = (front + 1) % maxSize;
return e;
}
}