栈的特征
网络异常,图片无法展示
|
栈的应用
- 系统栈
网络异常,图片无法展示
|
- 括号匹配问题。LeetCode-20。
网络异常,图片无法展示
|
/** * 有效字符串需满足: * - 左括号必须用相同类型的右括号闭合。 * - 左括号必须以正确的顺序闭合。第一个必须是左括号。 */ public static boolean isValid(String s) { Stack<Character> stack = new Stack<>(); for(int i = 0; i < s.length(); i++) { char c = s.charAt(i); if(c == '[' || c == '(' || c == '{') { stack.push(c); }else { // 判断栈中是否为空。因为比较时,如果正确,一定是左括号先入栈。 if(stack.isEmpty()) { return false; } char top = stack.pop(); // 三个边界条件 if(c == ']' && top != '[') { return false; } if(c == ')' && top != '(') { return false; } if(c == '}' && top != '{') { return false; } } } // 上面的边界条件都判断后,可能栈中还存在元素,如果存在元素也是false。 return stack.isEmpty(); }
栈的实现
网络异常,图片无法展示
|
网络异常,图片无法展示
|
public interface StackInterface<E> { // push void push(E e); // pop E pop(); // 获取栈中元素个数 int getSize(); // peek E peek(); // isEmpty boolean isEmpty(); } public class ArrayStack<E> implements StackInterface<E> { private Array<E> array; private int capacity; public ArrayStack(int capacity) { array = new Array(capacity); } public ArrayStack() { this(10); } @Override public void push(E e) { array.addLast(e); } @Override public E pop() { E e = array.removeLast(); return e; } @Override public int getSize() { return array.getSize(); } @Override public E peek() { return array.getLast(); } @Override public boolean isEmpty() { return array.isEmpty(); } @Override public String toString() { StringBuilder res = new StringBuilder(); res.append("Stack ["); for(int i = 0; i < array.getSize(); i++) { res.append(array.get(i)); if(i != array.getSize() - 1) { res.append(","); } } res.append("] top"); return res.toString(); } }
复杂度分析
网络异常,图片无法展示
|