栈是一个常用的最简单的数据结构,这里提供了其实现.内部维护了一个数组,并且可以动态的调整数组的大小.而且,提供了迭代器支持后进先出的迭代功能.Stack的实现是所有集合类抽象数据类型实现的模板,它将所有元素保存在数组中,并动态的调整数组的大小,以保持数组大小和栈大小之比小于一个常数.
import java.util.Iterator; public class ResizingArrayStack<Item> implements Iterable<Item> { private Item [] a=(Item[])new Object[1];//内部维护了一个数组,存储数据. private int N; //元素数量. public ResizingArrayStack() {} public boolean isEmpty() { return N==0; } public int size() { return N; } public void push(Item item) { if(N==a.length) resize(2*a.length); //如果不断压入,自由的变更大小 a[N++]=item; } public Item pop() { Item str=a[--N]; a[N]=null; if(N<a.length/4) resize(a.length/2);//如果不断弹出,保证内存的利用率 return str; } public void resize(int n) { //将数组引用指向一个更大的数组 Item[] items=(Item[])new Object[n]; for(int i=0;i<a.length;i++) { items[i]=a[i]; } a=items; } @Override public Iterator<Item> iterator() { return new ReverseArrayIterator(); } private class ReverseArrayIterator implements Iterator<Item> { //支持后进先出的迭代. int i=N; @Override public boolean hasNext() { return i>0; } @Override public Item next() { return a[--i]; } } }