美文网首页
下压栈实现(可动态调整栈内存大小)

下压栈实现(可动态调整栈内存大小)

作者: he_321 | 来源:发表于2016-10-22 15:59 被阅读0次

    创建ResizeArrayStack实现Iterable接口使得ResizeArrayStack能够被迭代,用Item代替所有的数据类型。
    public class ResizeArrayStack<Item> implements Iterable<Item>

    //创建存放数据的数组(栈)
    private Item[] stack = ((Item[])new Object[1]);
    //记录栈中的元素个数,指明栈顶元素的位置(count-1)
    private int count = 0;
    //判断栈是否为空
    public boolean isEmpty(){
        return count == 0;
    }
    //返回迭代器,可用于迭代栈元素
    @Override
    public Iterator<Item> iterator() {
        return new ResizeArrayStackIterator();
    }
    
    /**
     * 重置数组的大小
     */
    private void resize(int max){ 
        Item[] newStack = (Item[]) new Object[max];
        for(int i = 0; i < stack.length; i ++){
            newStack[i] = stack[i];
        }
        stack = newStack;
    }
    //入栈操作
    public void push(Item item){
        if(count == stack.length){
            resize(stack.length * 2);
        }
        stack[count++] = item;
    }
    /**
     * 出栈操作
     * @return
     */
    public Item pop(){
        Item topItem = stack[--count];
        stack[count] = null;
        if(count >0 && count == stack.length/4)
            resize(stack.length/2);
        return topItem;
    }
    //创建迭代器
    class ResizeArrayStackIterator implements Iterator<Item>{
        int i = count;
        @Override
        public boolean hasNext() {
            return i > 0;
        }
        @Override
        public Item next() {
            return stack[--i];
        }
        @Override
        public void remove() {
        }
    }

    相关文章

      网友评论

          本文标题:下压栈实现(可动态调整栈内存大小)

          本文链接:https://www.haomeiwen.com/subject/fylhuttx.html