/************ a linked queue that implements Iterable and extends LinkedQueue compile this in the same directory as Queue.java the demo program includes instructions I and F that use an iterator to print all queue entries: I with a while loop and F with a for-each loop *************************************/ import java.util.*; class QueueIterator implements Iterator { private Node current; public QueueIterator(Node c) {current = c;} public Object next() { Object answer = current.getData(); current = current.getNext(); return answer; } public boolean hasNext() {return current != null;} public void remove() {;} } class ItQueue extends LinkedQueue implements Iterable { public Iterator iterator() { return new QueueIterator(front); } public static void main(String args[]) { Queue q = new ItQueue(); testQueue((ItQueue) q); } public static void testQueue(ItQueue q) { boolean done = false; while (!done) { try { Scanner sc = new Scanner(System.in); System.out.print( q + " "); System.out.println("\ncmds are F I + - Q: >>"); String cmd = sc.next(); String entry = null; char command = cmd.charAt(0); if (command == '+') entry = sc.next(); switch (cmd.charAt(0)) { case 'Q': done = true; break; case '+': q.enqueue(entry); break; case '-': q.dequeue(); break; case 'I': Iterator x = q.iterator(); while (x.hasNext()) System.out.print(x.next()); System.out.println(); break; case 'F': for (Object y: q) System.out.print(y); System.out.println(); break; } } catch (Exception e) { System.out.println("Error " + e.toString()); } } } }