《算法4》1.3.14习题详解

浏览:1845 发布日期:2024-10-12 00:54:22

编写一个类ResizingArrayQueueOfStrings

public class ResizingArrayQueueOfStrings implements Iterable<String>
{
    private String[] a = new String[1];
    private int N = 0;

    public void enqueue(String item)
    {
        // 将元素添加到队列尾部
        if (N == a.length)
        {
            this.resize(a.length * 2);
        }
        a[N++] = item;
    }

    public String dequeue()
    {
        // 从队列头部删除元素
        String item = a[0];
        for (int i = 1; i < N; i++)
        {
            a[i-1] = a[i];
        }
        N--;
        if (N > 0 && N == a.length / 4)
        {
            this.resize(a.length / 2);
        }

        return item;
    }

    private void resize(int max)
    {
        // 将队列移动到一个大小为max的新数组
        String[] temp = new String[max];
        for (int i = 0; i < N; i++)
        {
            temp[i] = a[i];
        }
        this.a = temp;
    }

    public boolean isEmpty()
    {
        return N == 0;
    }

    public int size()
    {
        return N;
    }

    private class ListIterator implements Iterator<String>
    {
        private int i = 0;
        @Override
        public boolean hasNext()
        {
            return i < N;
        }

        @Override
        public String next()
        {
            String item = a[i++];
            return item;
        }
    }

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