原文地址:http://brianleelxt.top/2018/07/26/Queue/
《Algorithm》(Sedgewick)笔记:队列
目的
用集合保存元素的同时保存它们的相对顺序:使它们入列顺序和出列顺序相同
特点
- 基于先进先出(FIFO)策略
API
public class Queue<Item> implements Iterable<Item>
Queue() | 创建空队列 |
---|---|
void enqueue(Item item) | 添加一个元素 |
Item dequeue() | 删除最早添加的元素 |
boolean isEmpty() | 队列是否为空 |
int size() | 队列中的元素数量 |
实现
public class Queue<Item> implements Iterable<Item> {
private class Node {
Item item;
Node next;
}
private Node first; //指向最早添加的结点的链接
private Node last; //指向最近添加的结点的链接
private int N;
public boolean isEmpty() { return N == 0; }
public int size() { return N; }
//向表尾添加元素
public void enqueue(Item item) {
Node oldLast = last;
last = new Node();
last.item = item;
last.next = null;
if (isEmpty())
first = last;
else
oldLast.next = last;
N ++;
}
//从表头删除元素
public Item dequeue() {
Item item = first.item;
first = first.next;
if (isEmpty())
last = first;
N --;
return item;
}
public Iterator<Item> iterator() {
return new Queue.ListIterator();
}
private class ListIterator implements Iterator<Item> {
private Node current = first;
public boolean hasNext() { return current != null; }
public void remove() { }
public Item next() {
Item item = current.item;
current = current.next;
return item;
}
}
}
源码地址
https://github.com/XutongLi/Algorithm-Learn/tree/master/src/S1_foundation/S1_3_BagQueueStack/S1_3_3_9_Queue