• 堆栈最早是由Alan M.Turing9(艾伦.图灵)于1946年提出的,当时是为了解决子程序的回调和返回。栈是一种后进先出的数据结构,它只能在一端进行删除和插入操作。比如一个盒子的直径只能放一个球,依次放入213号小球。如果需要拿出2号球就得先取出3号球,再取出1号球,最后才能取出2号球。

栈的常见应用:

(1) 浏览网页的时候需要回到之前的某个页面,要一步步点击后退键。

(2) 判断一个字符是否是回文字符。

(3) 验证括号的匹配。比如输入一行只包含()[]{}”字符串,判断“([{}()])”或“{()[]{}}”是否可正确匹配。

  1 package day11;
  2 
  3 
  4 
  5 public class MyStack {
  6 
  7     private final int count;
  8 
  9     private String[] stackString;
 10 
 11     private int index = -1;//索引指针,指向栈顶
 12 
 13  
 14 
 15     public MyStack(int count) {
 16 
 17         this.count = count;
 18 
 19         index = -1;
 20 
 21         stackString = new String[this.count];
 22 
 23     }
 24 
 25  
 26 
 27     public MyStack() {
 28 
 29         index = -1;
 30 
 31         this.count = 10;
 32 
 33         stackString = new String[this.count];
 34 
 35     }
 36 
 37  
 38 
 39     /**
 40 
 41      * 向容器里面放数据(压栈),如果超过范围就抛异常
 42 
 43      */
 44 
 45     public void pushData(String s) throws ArrayIndexOutOfBoundsException {
 46 
 47         if (index < count - 1) {
 48 
 49             stackString[++index] = s;
 50 
 51         } else {
 52 
 53             System.out.println(s + "压栈溢出!");
 54 
 55         }
 56 
 57     }
 58 
 59  
 60 
 61     /**
 62 
 63      * 从栈里面取数据
 64 
 65      */
 66 
 67     public String popData() {
 68 
 69         String s = stackString[index];
 70 
 71         index--;
 72 
 73         return s;
 74 
 75     }
 76 
 77  
 78 
 79     public Boolean isEmpty() {
 80 
 81         if (index == -1) {
 82 
 83             return true;
 84 
 85         } else {
 86 
 87             return false;
 88 
 89         }
 90 
 91     }
 92 
 93  
 94 
 95     public String toString() {
 96 
 97         String s = "";
 98 
 99         for (int i = 0; i <= index; i++) {
100 
101             s = s + stackString[i] + " ";
102 
103         }
104 
105         return s;
106 
107     }
108 
109  
110 
111     public static void main(String[] args) {
112 
113         MyStack myStack = new MyStack(3);//初始化栈大小为3
114 
115         myStack.pushData("aa");//向栈压入数据aa
116 
117         myStack.pushData("bb");//向栈压入数据bb
118 
119         myStack.pushData("cc");//向栈压入数据cc
120 
121         System.out.println("压栈完成以后数据如下:");
122 
123         System.out.println((myStack.toString()));
124 
125  
126 
127         System.out.println("开始弹栈,从栈中取数据!");
128 
129         System.out.println("------弹出1个数据以后栈中数据情况如下------");
130 
131         myStack.popData();
132 
133         System.out.println((myStack.toString()));
134 
135  
136 
137         System.out.println("------弹出2个数据以后栈中数据情况如下------");
138 
139         myStack.popData();
140 
141         System.out.println((myStack.toString()));
142 
143  
144 
145         System.out.println("------弹出3个数据以后(弹栈完毕以后栈中数据情况)------");
146 
147         myStack.popData();
148 
149         System.out.println((myStack.toString()));
150 
151         System.out.println("弹出所有数据以后,栈是否是空的:"+myStack.isEmpty());
152 
153     }
154 
155 }

执行结果:

 

欢迎批评指正,提出问题,谢谢!
原文地址:https://www.cnblogs.com/xxeleanor/p/14458540.html