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 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
分析:该代码主要包括出栈、入栈、取栈顶元素、栈空、栈满以及栈的大小。其实栈的实现整体上不难,但要判断是否要扩容以及栈空等细节情况
愿你悄悄的努力,遇见更好的自己~