import java.util.Iterator;
public class FixCapacityStack<Item> implements Iterable<Item>{
private Item[] a;
private int N;
FixCapacityStack(int caps){
a = (Item [])new Object[caps];
}
public void push(Item i){
//入栈前检查栈的大小,如果栈满扩展栈的大小为两倍
if(N==a.length){
resize(a.length*2);
}
a[N++] = i;
}
public Item pop(){
Item item = a[--N];
a[N] = null; //避免对象游离
//出栈检查栈的大小,如果栈的 大小为栈满的四分之一则栈减半;
//边界条件:数组的大小为4(N为1)
if(4*N==a.length && N>0){
resize(a.length/2);
}
return item;
}
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;
}
//实现Iterrable接口的Iterator方法
public Iterator<Item> iterator(){
return new ReverseArrayIterator();
}
//内部类实现Iterator对象
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) {
FixCapacityStack fixstack = new FixCapacityStack<Integer>(5);
for(int i=0; i<5; i++){
fixstack.push(i);
}
for(Object t : fixstack){
System.out.println((Integer)t);
}
}
}
下压栈(LIFO)(动态调整数组大小的实现)
最新推荐文章于 2021-11-12 14:45:59 发布