1 public class Stack { 2 private final int INIT_SIZE = 10; 3 private int size = 0; 4 private int[] array; 5 6 public Stack() { 7 array = new int[INIT_SIZE]; 8 } 9 10 public Stack(int init) {11 if (init <= 0) {12 array = new int [INIT_SIZE];13 }14 array = new int[init];15 }16 17 /**18 * 入栈19 * 20 * @param value21 * 入栈的元素22 */23 public void push(int value) {24 /* 判断是否要扩容 */25 if (size == array.length) {26 array = Arrays.copyOf(array, array.length * 2);27 }28 array[size++] = value;29 }30 31 /**32 * 取栈顶元素33 * 34 * @return 返回栈顶元素35 */36 public int top() {37 if (size == 0) {38 throw new IndexOutOfBoundsException("栈空了");39 }40 return array[size - 1];41 }42 43 /**44 * 出栈45 * 46 * @return 出栈元素47 */48 public int pop() {49 int item = top();50 size--;51 return item;52 }53 54 /**55 * 判断栈满56 * 57 * @return 布尔值58 */59 public boolean isFull() {60 return size == array.length;61 }62 63 /**64 * 判断是否栈空65 * 66 * @return67 */68 public boolean isEmpty() {69 return size == 0;70 }71 72 /**73 * 栈的大小74 * 75 * @return 栈的大小76 */77 public int size() {78 return size;79 }80 81 public static void main(String[] args) {82 Stack stack = new Stack();83 stack.push(0);84 System.out.println("出栈前的长度为:" + stack.size);85 stack.push(1);86 stack.push(2);87 System.out.println("出栈前的栈顶元素为:" + stack.top());88 System.out.println("出栈元素为:" + stack.pop());89 System.out.println("出栈后的长度为:" + stack.size);90 System.out.println("出栈后的栈顶元素为:" + stack.top());91 }92 }
运行结果:
出栈前的长度为:1
出栈前的栈顶元素为:2 出栈元素为:2 出栈后的长度为:2 出栈后的栈顶元素为:1
分析:该代码主要包括出栈、入栈、取栈顶元素、栈空、栈满以及栈的大小。其实栈的实现整体上不难,但要判断是否要扩容以及栈空等细节情况