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 <= 10) { 12 init = 10; 13 } 14 array = new int[init]; 15 } 16 17 /** 18 * 入栈 19 * 20 * @param value 21 * 入栈的元素 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 * @return 67 */ 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
分析:该代码主要包括出栈、入栈、取栈顶元素、栈空、栈满以及栈的大小。其实栈的实现整体上不难,但要判断是否要扩容以及栈空等细节情况
时间: 2024-10-12 21:12:32