数据结构复习,代码是最好的说明。
栈可以用数组实现,也可以用单链表实现,毕竟简单,基本操作自查API。
括号匹配:
public class ParenthesisMatching {
private static HashMap<Character,Character> map;
static {
map = new HashMap();
map.put(')','(');
map.put(']','[');
map.put('}','{');
}
/**
* 遍历表达式字符串
* 一、遇左括号压栈
* 二、遇右括号 1、栈为空 false 2、栈非空 与栈顶匹配则栈顶出栈 否则false
* 三、其他 continue
*
* 栈为空 true 非空 false
* @param str
* @return
*/
public static boolean parenthesisMatching(String str){
Stack stack = new Stack();
for (int i = 0; i <str.length() ; i++) {
Character c = str.charAt(i);
if(map.containsValue(c)){
stack.push(c);
}else if (map.containsKey(c)){
if (stack.isEmpty()) return false;
Character help = (Character) stack.peek();
if (help == map.get(c)){
stack.pop();
}else {
break;
}
}
}
if (stack.isEmpty()) return true;
return false;
}
public static void main(String[] args) {
System.out.println(parenthesisMatching("{(1+2)+[2+3]}"));
}
}
后续表达式计算:
开辟一个运算分量栈,一遇分量进栈,二遇运算符取栈顶两个分量进行运算,结果进栈
/**
* 0-9加减乘除,无错误检查
*/
publi