作者: 写啥呢 | 来源:发表于2019-06-18 17:17 被阅读0次

    栈:

    1.操作:入栈和出栈。
    2.先进后出。
    3.基于数组实现:顺序栈。
    4.基于链表实现:链式栈。
    

    顺序栈

    // 基于数组实现的顺序栈
    public class ArrayStack {
      private String[] items;  // 数组
      private int count;       // 栈中元素个数
      private int n;           // 栈的大小
    
      // 初始化数组,申请一个大小为 n 的数组空间
      public ArrayStack(int n) {
        this.items = new String[n];
        this.n = n;
        this.count = 0;
      }
    
      // 入栈操作
      public boolean push(String item) {
        // 数组空间不够了,直接返回 false,入栈失败。
        if (count == n) return false;
        // 将 item 放到下标为 count 的位置,并且 count 加一
        items[count] = item;
        ++count;
        return true;
      }
      
      // 出栈操作
      public String pop() {
        // 栈为空,则直接返回 null
        if (count == 0) return null;
        // 返回下标为 count-1 的数组元素,并且栈中元素个数 count 减一
        String tmp = items[count-1]; //这里只需要一个额外的空间。空间复杂度为O(1)
        --count;
        return tmp;
      }
    }
    
    总结:栈空间复杂度和时间复杂度O(1)
    

    栈的应用:函数调用栈,表达式求值,括号匹配,浏览器的前进后退。
    相关code:https://github.com/wangzheng0822/algo/tree/master/java/08_stack

    相关文章

      网友评论

          本文标题:

          本文链接:https://www.haomeiwen.com/subject/vatqqctx.html