循環隊列數組
package com.cn.jichu.day09; public class LoopQueue<E> { /** * 數組 */ private E[] data; /** * 頭指針,尾指針 */ private int head,tail; /** * 當前數組大小 */ private int size; public LoopQueue(int size) { data = (E[]) new Object[size]; this.size = size; } public LoopQueue() { this(10); } /** * 入隊 * @param e */ public void enqueue(E e){ //當尾指針的下一個位置 和頭指針重合時,證實當前隊列已經滿了(當前會浪費一個位置) if((tail + 1) % size == head){ throw new IllegalArgumentException("當前隊列滿了,不能再加入新的元素了"); } //當前尾指針指向的位置填入新的元素 data[tail] = e; //將指針移動到下一個空位置 tail = (tail + 1) % size; } /** * 出隊 * @return */ public E dequeue(){ //當頭指針和尾指針重合時,說明隊列中沒有可取元素 if(head == tail){ throw new IllegalArgumentException("當前隊列沒有元素了"); } E e = data[head]; data[head] = null; head = (head + 1) % size; return e; } @Override public String toString(){ StringBuilder ret = new StringBuilder(); ret.append("queue ["); for(int i=0;i<data.length;i++){ ret.append(data[i] + " "); } ret.append(" ] "); return ret.toString(); } }