public class QueueReferenceBased implements QueueInterface { private Node front, back; public QueueReferenceBased() { front = back = null; } // end default constructor // queue operations: public boolean isEmpty() { return front == null; } // end isEmpty public void dequeueAll() { front = back = null; } // end dequeueAll public void enqueue(Object newItem) { Node newNode = new Node(newItem); // insert the new node if (isEmpty()) { // insertion into empty queue front = back = newNode; } else { // insertion into nonempty queue back.setNext(newNode); back=newNode; } // end if } // end enqueue public Object dequeue() throws QueueException { if (!isEmpty()) { // queue is not empty; remove front Node tmp = front; front=front.getNext(); return tmp.getItem(); } else { throw new QueueException("QueueException on dequeue:" + "queue empty"); } // end if } // end dequeue public Object peek() throws QueueException { if (!isEmpty()) { // queue is not empty; retrieve front return front.getItem(); } else { throw new QueueException("QueueException on peek:" + "queue empty"); } // end if } // end peek } // end QueueReferenceBased