package stack;
import sort.insert.Insertion;
import java.util.Stack;
public class LinkStackTest {
public static void main(String[] args) {
System.out.println("((hel(lo)zhw(h)h)) 括号是否匹配: "+isMatch("((hel(lo)zhw(h)h))"));
String[] notation={"3","17","15","-","*","18","6","/","+"};
System.out.println("逆波兰表达式的结果为:"+caculate(notation));
}
public static boolean isMatch(String str){
char[] chars = str.toCharArray();
LinkStack<Character> stack=new LinkStack<>();
for (char c : chars) {
if('('==c){
stack.push(c);
}else if(')'==c){
Character pop = stack.pop();
if (pop==null){
return false;
}
}
}
return stack.size()<=0;
}
public static int caculate(String[] notation){
LinkStack<Integer> stack=new LinkStack<>();
for (String s : notation) {
Integer o1;
Integer o2;
Integer result;
switch (s){
case "+":
o1=stack.pop();
o2=stack.pop();
result=o2+o1;
stack.push(result);
break;
case "-":
o1=stack.pop();
o2=stack.pop();
result=o2-o1;
stack.push(result);
break;
case "*":
o1=stack.pop();
o2=stack.pop();
result=o2*o1;
stack.push(result);
break;
case "/":
o1=stack.pop();
o2=stack.pop();
result=o2/o1;
stack.push(result);
break;
default:
stack.push(Integer.valueOf(s));break;
}
}
return stack.pop();
}
}