Algs4-1.3不定容数组实现泛型栈支持迭代

import java.util.Iterator;
public class ResizingArrayStack<Item> implements Iterable<Item>
{
    private Item[] a=(Item[]) new Object[1];
    private int N=0;
    public boolean isEmpty(){return N==0;}
    public int size(){return N;}
    private void resize(int max)
    {
        Item[] temp=(Item[]) new Object[max];
        for(int i=0;i<N;i++)
            temp[i]=a[i];
        a=temp;
    }//end resize
    public void push(Item item)
    {
        if(N==a.length) resize(2*a.length);
            a[N++]=item;
    }//end push
    public Item pop()
    {
        Item item=a[--N];
        a[N]=null;
        if(N>0 && N==a.length/4) resize(a.length/2);
        return item;
    }//end pop
    public Iterator<Item> iterator()
    {return new ReverseArrayIterator();}
   
    private class ReverseArrayIterator implements Iterator<Item>
    {
        private int i=N;
        public boolean hasNext(){return i>0;}
        public Item next(){return a[--i];}
        public void remove(){}
     }
   
    public static void main(String[] args)
    {
        ResizingArrayStack<String> s;
        s=new ResizingArrayStack();
        while(!StdIn.isEmpty())
        {
            String item=StdIn.readString();
            if(!item.equals("-"))
                s.push(item);
         }//end while
        for(String i:s)
            StdOut.printf(i+" ");
    }
}

posted @ 2018-10-25 13:37  修电脑的龙生  阅读(92)  评论(0编辑  收藏  举报