
/*
     Queue.java: create a Queue using the java Vector class.

     This is easy code to write because a Queue has a subset
     of the functionality of the Java Vector class.
     MAH 10/19/01
*/

import java.util.*;  // this contains  the Vector class

public class Queue {

    private Vector queue;

    // constructor
    Queue ()  {
        queue = new Vector();
    }

    // constructor
    Queue (int initialSize) {
         if (initialSize >= 1) {
             queue = new Vector(initialSize);
         } else {
             queue = new Vector();
         }
     }

    public void enQueue (Object item) {
        queue.addElement(item);
    }

    public Object front () {
        return queue.firstElement();
    }

 // I decided to make removing an object on a null queue
 // return a null queue.  I could have thrown an exception instead.

    public Object deQueue () {
        Object obj = null;

       if (!queue.isEmpty()) {
            obj = front();
           queue.removeElement(obj);
       }

        /* an alternative
        if (! queue.isEmpty()) {
            obj = front();
            queue.removeElementAt(0);
       }
       */
        return obj;
    }

    public boolean isEmpty() {
        return queue.isEmpty();
    }

    public int size() {
         return queue.size();
     }

     public int availableRoom() {
         return (queue.capacity() - queue.size());
     }

    // perform a deQueue and convert the result to a string
     public String deQueueString() {
         Object obj = deQueue();
         if (obj != null) {
             return obj.toString();
         } else {
             return  " ";
         }
     }

     // This shows how to use the elements() method
     // print the queue without dequeueing anything
     // Note that it needs to be made smarter to print
     // out complex objects properly.
     public void printQueue() {

         Enumeration e = queue.elements();
         String str;
         while (e.hasMoreElements()) {
             str = e.nextElement().toString();
             System.out.print(str + " ");
         }
         System.out.println();
     }

 // test it out
     public static void main(String args[]) {
         Queue myQueue = new Queue();
         myQueue.enQueue("hello");
         myQueue.enQueue("there");
         myQueue.enQueue("SIMIANS");
         myQueue.deQueue();
         myQueue.deQueue();
         myQueue.enQueue("are");
         myQueue.enQueue("awesome!");
         System.out.println("available room: " + myQueue.availableRoom());
         myQueue.printQueue();
         while (!myQueue.isEmpty()) {
            System.out.println(myQueue.deQueueString() + " ");
        }

     }

}
