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 63 64 65 66 67 68 69 70 71 72
| public class MyStack {
private int[] storage; private int capacity; private int count; private static final int GROW_FACTOR = 2;
public MyStack() { this.storage = new int[8]; this.capacity = 8; this.count = 0; }
public MyStack(int capacity) { if (capacity < 1) { throw new IllegalArgumentException("capacity illegal"); }
this.storage = new int[capacity]; this.capacity = capacity; this.count = 0; }
public void push(int value) { if (count == capacity) { ensureCapacity(); } storage[count++] = value; }
private void ensureCapacity() { int newCapacity = capacity * GROW_FACTOR; storage = Arrays.copyOf(storage, newCapacity); capacity = newCapacity; }
public int pop() { if (count == 0) { throw new IllegalArgumentException("Stack is empty."); } count--; return storage[count]; }
public int peek() { if (count == 0) { throw new IllegalArgumentException("Stack is empty."); } else { return storage[count - 1]; } }
public boolean isEmpty() { return count == 0; }
public int size() { return count; } }
|