前言:算法第四版1.3节 背包、队列和栈 学习总结
Stack:
import java.util.Iterator;
/**
* 动态调剂数组大小的栈
* 功效: LIFO
* @author Chuanjie
* @param <T>
*
*/
public class ResizingArrayStack<T> implements Iterable<T> {
private T[] a = (T[])new Object[1];;
private int n = 0;
private void resize(int sz){
T[] temp = (T[])new Object[sz];
for(int i = 0;i < n;i++)
temp[i] = a[i];
a = temp;
}
public boolean isEmpty(){
return n == 0;
}
public int size(){
return n;
}
public void push(T item){
if(n == a.length)
resize(2*a.length);
a[n++] = item;
}
public T pop(){
T item = a[--n];
a[n] = null;//释放援用, 避免对象游离,垃圾回收器可以将其回收
if(n > 0 && n == a.length/4)
resize(a.length/2);
return item;
}
@Override
public Iterator<T> iterator() {
return new ReverseArrayIterator();
}
private class ReverseArrayIterator implements Iterator<T>{
private int i = n;
@Override
public boolean hasNext(){
return i > 0;
}
@Override
public T next() {
return a[--i];
}
@Override
public void remove() {
}
}
}import java.util