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

2016-10-22  本文已影响0人  he_321

创建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() {
    }
}
上一篇下一篇

猜你喜欢

热点阅读