标签:tca div nbsp class public res ref 判断 添加元素
1、什么是栈
栈也是一种线性结构,
相比数组,栈对应的操作是数组的子集
只能从一端添加元素,也只能从一端取出元素
这一端称为栈顶
栈是一种后进先出的数据结构。
2、栈的应用
1) 编辑器无处不在的Undo操作(撤销)
2) 程序调用的系统栈
函数A中调用函数B,函数B中调用函数C。
如果C函数执行完了,从栈中查看是B2,接着执行B2的下面1行代码。
如果B函数执行完了,总栈中查看是A2,接着执行A2的下面1行代码。
3) 括号匹配 编译器
3、自定义栈
定义接口
public interface Stack<E> { int getSize(); boolean isEmpty(); void push(E e); E pop(); E peek(); }
定义自定义栈。基于前面创建的动态数组CustomArray自定义数组(动态数组)
public class ArrayStack<E> implements Stack<E> { CustomArray<E> array; public ArrayStack(int capacity){ array = new CustomArray<E>(capacity); } public ArrayStack(){ array = new CustomArray<E>(); } public int getSize() { return array.getSize(); } public boolean isEmpty() { return array.isEmpty(); } public int getCapacity(){ return array.getCapacity(); } public void push(E e) { array.addLast(e); } public E pop() { return array.removeLast(); } public E peek() { return array.getLast(); } @Override public String toString() { StringBuilder res = new StringBuilder(); res.append("Stack: "); res.append("["); for(int i = 0; i < array.getSize(); i++){ res.append(array.get(i)); if(i != array.getSize() - 1){ res.append(", "); } } res.append("]"); return res.toString(); } }
4、编译器 括号匹配
问题描述:给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
解决方法: 如下代码所示
public class Solution { public boolean isValid(String s){ Stack<Character> stack = new Stack<Character>() ; 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 topChar = stack.pop(); if( c == ‘)‘ && topChar != ‘(‘){ return false; } if( c == ‘]‘ && topChar != ‘[‘){ return false; } if( c == ‘}‘ && topChar != ‘{‘){ return false; } } } return stack.isEmpty(); } }
标签:tca div nbsp class public res ref 判断 添加元素
原文地址:https://www.cnblogs.com/linlf03/p/14384308.html