队列
API
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
| import java.util.Iterator;
public class Queue<E> implements Iterable<E> {
public void enqueue(E e);
public E dequeue();
public int size();
public boolean isEmpty();
@Override public Iterator<E> iterator(); }
|
实现
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| public class Queue<E> implements Iterable<E> {
private static class Node<T> { T item; Node<T> next;
Node(T item, Node<T> next) { this.item = item; this.next = next; } }
private Node<E> head;
private Node<E> tail;
private int size;
public void enqueue(E e) { Node<E> node = new Node<>(e, null); if (head == null) { head = node; tail = node; } else { tail.next = node; tail = node; } size++; }
public E dequeue() { if (isEmpty()) { throw new IllegalArgumentException("empty queue"); } Node<E> node = head; head = head.next; node.next = null; size--; return node.item; }
public int size() { return size; }
public boolean isEmpty() { return head == null; }
private class QueueIterator implements Iterator<E> { Node<E> current = head;
@Override public boolean hasNext() { return current != null; }
@Override public E next() { Node<E> node = current; current = current.next; return node.item; } }
@Override public Iterator<E> iterator() { return new QueueIterator(); }
}
|
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public static void main(String[] args) { Queue<Integer> queue = new Queue<>(); for (int i = 0; i < 5; i++) { queue.enqueue(i); } System.out.println("queue size is : " + queue.size());
for (int i : queue) { System.out.println(i); }
for (int i = 0; i < 5; i++) { queue.dequeue(); } System.out.println("queue size is : " + queue.size()); System.out.println("queue is empty : " + queue.isEmpty()); }
|