CS 221
Advanced Programming

Monday, February 9, 2009

Guest Lecture on Generic Queues by John Paxton

public class Driver
{
    public static void main (String  [] args)
    {
        Queue q = new Queue();
        q.enqueue(new Name("John", "Paxton"));
        q.enqueue(new Name("Jason", "Taylor"));
        
	     while (!q.isEmpty())
	     {
	         System.out.println(q.peek());
	         q.dequeue();
	     }
	     System.out.println(q.peek());
        
    }
}


public class Name
{
    Name (String f, String l)
    {
        firstName = f;
        lastName = l;
    }
    
    public String toString()
    {
        return firstName + " " + lastName;
    }
    
    
    private String firstName;
    private String lastName;
}


public class Node<E>
{
    Node (E contents)
    {
        this.contents = contents;
        this.next = null;
    }
    
    public Node<E> getNext ()
    {
        return next;
    }
    
    public E getContents()
    {
        return contents;
    }
    
    public void setNext (Node<E> n)
    {
        this.next = n;
    }
    
    private E contents;
    private Node<E> next;
}


public class Queue<E>
{
    Queue()
    {
        makeEmpty();
    }
    
    public void makeEmpty()
    {
        first = new Node<E>(null);
        first.setNext(first);
        last = first;
    }
    
    public boolean isEmpty()
    {
        return (first == last);
    }
    
    public void enqueue (E contents)
    {
        Node<E> n = new Node<E>(contents);
        last.setNext(n);
        n.setNext(first);
        last = n;
    }
    
    public void printQueue()
    {
        System.out.println("Queue Contents");
        System.out.println("--------------");
        System.out.print(this);
        System.out.println("---- End -----");
    }
    
    public String toString ()
    {
        String result = "";
        Node<E> pointer = first.getNext();
        while (pointer != first)
        {
            result += pointer.getContents() + "\n";
            pointer = pointer.getNext();
        }
        return result;
    }
    
    public E peek ()
    {
        return first.getNext().getContents();
    }
    
    public void dequeue ()
    {
        first.setNext(first.getNext().getNext());
        if (first == first.getNext())
        {
            last = first;
        }
    }
    
    private Node<E> first;
    private Node<E> last;
}