通过数组的方式实现栈的基本功能,看书看到这了就写个复习下。
知识点主要包含泛型、迭代、动态1/2大小、避免游离。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| import java.util.Iterator;
public class ReSizingArrayStack<Item> implements Iterable<Item> {
private Item[] a = (Item[]) new Object[1]; private int N = 0;
public boolean isEmpty() { return N == 0; }
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; }
public void push(Item item) { if (N == a.length) resize(2 * a.length); a[N++] = item; }
public Item pop() { Item item = a[--N]; a[N] = null; if (N > 0 && N == a.length / 4) resize(a.length / 2); return item; }
@Override public Iterator<Item> iterator() { return new ReverseArrayIterator(); }
private class ReverseArrayIterator implements Iterator<Item> { private int i = N;
@Override public boolean hasNext() { return i > 0; }
@Override public Item next() { return a[--i]; } }
}
|