算法4学习-1.3.2 下压(LIFO)栈(动态调整数组大小的实现)

通过数组的方式实现栈的基本功能,看书看到这了就写个复习下。

知识点主要包含泛型、迭代、动态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;
/**
* 下压(LIFO)栈(动态调整数组大小的实现)
*
* Created by tuzhis on 2016年1月14日.
*/
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];
}
}

}