栈
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