数据结构 队列Queue
队列 Queue
- 队列是一种特殊的线性表,只能在头尾两端操作
- 队尾(rear): 只能从队尾添加元素,即 enQueue,入队
- 队头(front): 只能从队头移除元素,即 deQueue,出队
- 队列遵循先进先出的原则,First In First Out,FIFO
实现队列
- 队列的内部实现可以使用动态数组或双向链表实现,但是优先使用双向链表 LinkedList,因为队列主要是操作头尾元素
- 官方 JDK 源码的 Queue 是一个接口,由 LinkedList 实现了该接口
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
| import java.util.LinkedList; import java.util.List;
public class Queue<E> { private List<E> list;
public Queue() { list = new LinkedList<>(); }
public int size() { return list.size(); }
public boolean isEmpty() { return list.isEmpty(); }
public void enQueue(E ele) { list.add(ele); }
public E deQueue() { return list.remove(0); } public E front() { return list.get(0); } }
|
双端队列 Deque
- 双端队列是在队头和队尾都可以添加、删除元素的特殊队列
实现双端队列
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
| import java.util.LinkedList; import java.util.List;
public class Deque<E> { private List<E> list;
public Deque() { list = new LinkedList<>(); }
public int size() { return list.size(); }
public boolean isEmpty() { return list.isEmpty(); } public void enQueueFront(E ele) { list.add(0,ele); } public void enQueueRear(E ele) { list.add(ele); } public E deQueueFront() { return list.remove(0); } public E deQueueRear() { return list.remove(list.size()-1); } public E front() { return list.get(0); } public E rear() { return list.get(list.size()-1); } }
|
参考