• 堆栈最早是由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 }

    执行结果:

     

    欢迎批评指正,提出问题,谢谢!
  • 相关阅读:
    phpcms后台获取当前登录账号的数据
    【原生】验证码的生成
    PHP 生成图片缩略图函数
    3秒后自动跳转页面【js】
    JS定时器
    JS字符串转换成json对象。。。。
    JVM调优总结(十二)-参考资料
    JVM调优总结(十一)-反思
    JVM调优总结(十)-调优方法
    浅谈java内存泄漏
  • 原文地址:https://www.cnblogs.com/xxeleanor/p/14458540.html
Copyright © 2020-2023  润新知