下压栈——能够动态调整数组大小的实现

来源:互联网 发布:织梦dedecms免费模板 编辑:程序博客网 时间:2024/04/28 16:00
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;    }    public void resize(int max){        Item[] temp = (Item[])new Object[max];        for(int i = 0;i<N;i++){            temp[i] = a[i];        }        a = temp;    }    public void push(Item item){        if(N == a.length) resize( 2 * a.length);        a[N++] = item;    }    public Item pop(){        Item item = a[--N];        a[N] = null;        if(N>0 && N == a.length/4) resize(a.length/2);        return item;    }    @Override    public Iterator<Item> iterator() {        return new ReverseArrayIterator();    }    private class ReverseArrayIterator implements Iterator<Item>{        private int i = N;        @Override        public boolean hasNext() {            return i > 0;        }        @Override        public Item next() {            return a[--i];        }        @Override        public void remove() {            throw new UnsupportedOperationException();        }    }}

实现Iterable接口,这样就可以使用foreach方法了,内部类实现迭代方法,stack有加入和弹出的方法,因为要实现动态数组,需要实现resize()方法。使用数组来组织类型,

0 0
原创粉丝点击