下压栈实现(可动态调整栈内存大小)
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() {
}
}