import java.util.*;
public class QueueOfMine<Item> implements Iterable<Item> {
private int N;
private Node first; //始终指向首节点
private Node last; //始终指向尾节点
private class Node{
Item data;
Node next;
}
public int getNum() {
return N;
}
public boolean isEmpty() {
return first == null ? true : false;
}
public Item dequeue() {
Item ans = first.data;
first = first.next;
if(isEmpty())
last = null;
N--;
return ans;
}
public void enqueue(Item item) {
Node oldLast = last;
last = new Node();
last.data = item;
if(isEmpty())
oldLast = last;
else
oldLast.next = last;
N++;
}
public Iterator<Item> iterator(){
return new QueueIterator();
}
private class QueueIterator implements Iterator<Item> {
Node current = first;
public boolean hasNext() {
if(current != null)
return true;
else
return false;
}
public Item next() {
Item ans = current.data;
current = current.next;
return ans;
}
public void remove() {}
}
}