《算法4》1.3.29习题详解

浏览:1725 发布日期:2024-10-15 00:46:44

1.3.29 用环形链表实现Queue

代码如下:

public class LoopListQueue implements Iterable<String>
{
    private NodeStr last;
    private int n;

    public boolean isEmpty()
    {
        return last == null;
    }

    public int size()
    {
        return n;
    }

    public void enqueue(String item)
    {
        NodeStr node = new NodeStr(item);
        if (isEmpty())
        {
            last = node;
            node.setNext(node);
        }
        else
        {
            NodeStr first = last.getNext();
            node.setNext(first);
            last.setNext(node);
            last = node;
        }
        n++;
    }

    public String dequeue()
    {
        if (isEmpty())
        {
            throw new NoSuchElementException("Queue is empty");
        }
        else
        {
            NodeStr first = last.getNext();
            last.setNext(first.getNext());
            n--;
            if (n == 0)
            {
                last = null;
            }
            return first.getItem();
        }
    }

    private class ListIterator implements Iterator<String>
    {
        private NodeStr first = null;
        private int i = 0;

        public ListIterator()
        {
            if (last != null)
            {
                first = last.getNext();
            }
        }
        @Override
        public boolean hasNext()
        {
            return i < n;
        }

        @Override
        public String next()
        {
            String item = first.getItem();
            first = first.getNext();
            i++;
            return item;
        }
    }

    @Override
    public Iterator<String> iterator()
    {
        return new LoopListQueue.ListIterator();
    }
}