队列是一种线性结构。
队列的元素只能先进先出。就像流水线一样。
队列的出口端叫队头(front),入口端叫队尾(rear)。
下面用数组实现一个循环队列,为了操作方便,将队尾位置规定为最后一个入队元素的下一个位置。所以一个长度为n的队列,可以装n-1个元素。
直到(队尾下标+1)%数组长度=队头下标时,标志队列已满。
package data.structure;
public class MlnkQueue {
private int array[];
private int front;//队头下标
private int rear;//队尾下标
public MlnkQueue(int capacity){
this.array = new int[capacity];
}
/**入栈
* @param element 入队的元素
* @throws Exception
*/
public void enterQueue(int element) throws Exception{
if ((rear+1)%array.length == front) {
throw new Exception("队列已满!");
}
array[rear] = element;
rear = (rear+1)%array.length;
System.out.println("rear: " + rear);
}
/**出栈
* @param element 出队的元素
* @throws Exception
*/
public int outQueue() throws Exception{
if (rear == front) {
throw new Exception("队列已空!");
}
int outQueueElement = array[front];
front = (front+1)%array.length;
System.out.println("front: " + front);
return outQueueElement;
}
public void outputQueue(){
for (int i = front; i!=rear; i=(i+1)%array.length) {
System.out.println(array[i]);
}
}
public static void main(String[] args) throws Exception {
MlnkQueue mlnkQueue = new MlnkQueue(6);
mlnkQueue.enterQueue(2);
mlnkQueue.enterQueue(7);
mlnkQueue.enterQueue(4);
mlnkQueue.enterQueue(9);
mlnkQueue.enterQueue(5);
mlnkQueue.outQueue();
mlnkQueue.enterQueue(11);
mlnkQueue.enterQueue(12);
mlnkQueue.enterQueue(13);
mlnkQueue.enterQueue(14);
mlnkQueue.enterQueue(15);
}
}