队列特点

  • 一段连续的内存空间(存疑)
  • 先进先出
  • 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;
}
// 获得队顶元素
}