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

 

分析:该代码主要包括出栈、入栈、取栈顶元素、栈空、栈满以及栈的大小。其实栈的实现整体上不难,但要判断是否要扩容以及栈空等细节情况

posted on 2017-04-13 21:48  呵呵静  阅读(296)  评论(0编辑  收藏  举报