2019-06-18  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读