001package hw5.problem1;
002
003import java.util.LinkedList;
004import java.util.List;
005
006/**
007 * IntQueue1 is our first implementation of a basic first-in, first-out queue
008 * for Integers.
009 * <p>
010 *
011 * An IntQueue can be described as [n1, n2, ..., n_k], where n1 is the
012 * least-recently-added item in the queue and is the next item to be
013 * removed.  n_k is the most-recently-added and will be the last of the
014 * current elements to be removed.
015 * <p>
016 *
017 * An IntQueue can also be described constructively, with the append operation,
018 * ':', such that [n1, n2, ..., n_k] : n_k+1 is the result of enqueing n_k+1
019 * at the end of the queue.
020 *
021 * @author Krysta Yousoufian
022 */
023public class IntQueue1 {
024    // This class represents a queue as a linked list where the front of
025    // the list corresponds to the front of the queue.
026
027    // Normally, your abstraction function and representation invarant would go
028    // here. For ease of grading, please place them in hw5/answers/problem1.txt
029    // instead with your answers to the other written exercises.
030
031    List<Integer> entries;
032
033    /**
034     * @effects constructs an empty queue
035     */
036    public IntQueue1() {
037        entries = new LinkedList<Integer>();
038        checkRep();
039    }
040
041    /**
042     * Enqueue an item
043     * @param entry item to be added to the queue
044     * @modifies this
045     * @effects places entry at the end of the queue
046                 * @throws IllegalArgumentException if entry is null
047     */
048    public void enqueue(Integer entry) {
049                                if (entry == null) {
050                                                throw new IllegalArgumentException("entry cannot be null");
051                                }
052        entries.add(entry);
053        checkRep();
054    }
055
056    /**
057     * Dequeue an item
058     * @requires size() > 0
059     * @modifies this
060     * @effects removes the item at the front of the queue
061     * @return the item that was first in the queue
062     */
063    public Integer dequeue() {
064        Integer front = entries.remove(0);
065        checkRep();
066        return front;
067    }
068
069    /**
070     * See the next item without removing it
071     * @requires size() > 0
072     * @return the item currently first in the queue
073     */
074    public Integer front() {
075        return entries.get(0);
076    }
077
078    /**
079     *
080     * @return number of elements in the queue
081     */
082    public int size() {
083        return entries.size();
084    }
085
086    /**
087     *
088     * @return size() == 0
089     */
090    public boolean isEmpty() {
091        return entries.isEmpty();
092    }
093
094    public void checkRep() {
095        // If I gave this to you, you wouldn't have the fun of figuring out the
096        // rep invariant for yourself :)
097    }
098}