1 package practice;
2
3 import java.util.Iterator;
4 //栈
5 public class MyStack<T> implements Iterable<T> {
6 private T[] a;
7 private int p = 0;
8 @SuppressWarnings("unchecked")
9 public MyStack() {
10 a = (T[]) new Object[1];
11 }
12
13 public void push(T elements) {
14 if (a.length == p) {resize(2*a.length);}
15 a[p++] = elements;
16 }
17
18 public T pop() {
19 if (a.length/4 == p) {resize(a.length/2);}
20 return a[--p];
21 }
22
23 @SuppressWarnings("unchecked")
24 public void resize(int length) {
25 T[] b = (T[]) new Object[length]; //将数组长度改变
26 for (int i = 0; i < p; i++) { //将数组复制
27 b[i] = a[i];
28 }
29 a = b; //让a指向b的内存空间
30 }
31
32 public boolean isEmpty() {
33 return p == 0;
34 }
35
36 public int size() {
37 return p;
38 }
39 @Override
40 public Iterator<T> iterator() { //使数据结构可以让foreach访问
41 return new ArrayIterator();
42 }
43 private class ArrayIterator implements Iterator<T>{
44
45 private int p2 = 0;
46
47 @Override
48 public boolean hasNext() { //return false 则foreach终止
49 return p2 != p;
50 }
51
52 @Override
53 public T next() { //foreach 寻找下一个元素
54 return a[p2++];
55 }
56 }
57 }