Java数据结构实现之队列(1)

来源:互联网 发布:spss数据输入教程 编辑:程序博客网 时间:2024/05/22 13:47

最近在刷leetcode,打算还是做一下笔记吧

队列,特点,先进先出,比较基础的数据结构
mark一下

public class Queue<Item> implements Iterable<Item> {    private Node<Item> first;    private Node<Item> last;    private int n;    private static class Node<Item> {        private Item item;        private Node<Item> next;    }    /**     * 初始化一个空队列.     */    public Queue() {        first = null;        last  = null;        n = 0;    }    /**     * 是否为空     * @return     */    public boolean isEmpty() {        return first == null;    }    /**     * 返回队列数目     * @return     */    public int size() {        return n;    }    /**     * 返回队列First,但是不溢出     * @return     */    public Item peek() {        if (isEmpty()) throw new NoSuchElementException("Queue underflow");        return first.item;    }    /**     * 入队     * @param item     */    public void enqueue(Item item) {        Node<Item> oldlast = last;        last = new Node<Item>();        last.item = item;        last.next = null;        if (isEmpty()) first = last;        else           oldlast.next = last;        n++;    }    /**     * 出列     * @return     */    public Item dequeue() {        if (isEmpty()) throw new NoSuchElementException("Queue underflow");        Item item = first.item;        first = first.next;        n--;        if (isEmpty()) last = null;   // to avoid loitering        return item;    }    public String toString() {        StringBuilder s = new StringBuilder();        for (Item item : this) {            s.append(item);            s.append(' ');        }        return s.toString();    }     public Iterator<Item> iterator()  {        return new ListIterator<Item>(first);      }    private class ListIterator<Item> implements Iterator<Item> {        private Node<Item> current;        public ListIterator(Node<Item> first) {            current = first;        }        public boolean hasNext()  { return current != null;                     }        public void remove()      { throw new UnsupportedOperationException();  }        public Item next() {            if (!hasNext()) throw new NoSuchElementException();            Item item = current.item;            current = current.next;             return item;        }    }}