队列特点
- 一段连续的内存空间(存疑)
- 先进先出
- put(入队)、poll(出队)
- 可由数组、链表实现
- 顺序队列、循环队列
- head(头) , tail(尾)
顺序队列会造成“假上溢”(head已经poll之后,再put时却无法使用原head位置的内存),于是应使用循环队列
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| package Queue; /** * * * @author jack * 2016年11月19日 上午1:37:17 */ public class Queue { // h t // [0,1,2,3,4] private Object[] arr; int head = 0; int tail = 0; // tail处不存储元素 public Queue(int cap) { arr = new Object[cap]; } // 入队 public boolean put(Object object) throws Exception { if (isFull()) { throw new Exception("The queue is full now"); } arr[tail] = object; tail = (tail + 1) % arr.length; return true; } // 出队 public Object poll() throws Exception { if (isEmpty()) { throw new Exception("The queue is empty now"); } Object result = arr[head]; head = (head + 1) % arr.length; return result; } // 判断是否满 public boolean isFull() { return head == (tail + 1) % arr.length; } // 判断是否空 public boolean isEmpty() { return head == tail; } // 获得队顶元素 }
|