package demo1_dataScuct;
import edu.princeton.cs.algs4.*;
public class Test1 {
public static void main(String []arg){
//stackTest();
// dijkstraAlgorithm("((2+3)/2)");
Dijkstra("((2+(9+9))/2)");
}
/*双栈算法:通过创建一个数栈和操作符栈来计算 加减乘除
* 核心思想:当遇见的是‘( ’不管他;遇见‘)’ 弹出一个数字 一个操作符 根据操作符
* 计算已经出来的数字和再新出来的数字的算法 记得将运算结果压栈
*
* 主要问题 当有两位及以上的数字存在的时候 计算可能会出现错误
* 待改进
* 参数数目《算法》(第四版)*
*
* */
public static void Dijkstra(String string){
//创建操作栈
Stack<Character> ops = new Stack<>();
//操作数栈
Stack<Double> vlas = new Stack<>();
char [] ch =string.toCharArray();
for(int i=0;i<ch.length;i++){
//String string = StdIn.readString();
char str = ch[i];
switch(str){
case '('://不起作用
break;
case ')':
char op =ops.pop();//出一个操作符
double v=vlas.pop();//出一个值
switch(op){
case '+':
v=v+vlas.pop();
break;
case '-':
v=v-vlas.pop();
break;
case '*':
v=v*vlas.pop();
break;
case'/':
v=vlas.pop()/v;
break;
//default:
}
vlas.push(v);
break;
case '+':
ops.push(str);
break;
case '-':
ops.push(str);;
break;
case '*':
ops.push(str);
break;
case'/':
ops.push(str);
break;
default:
vlas.push(Double.parseDouble(Character.toString(str)));
break;
}
}
System.out.println(vlas.pop());
}
}
算法4-双栈算法
猜你喜欢
转载自blog.csdn.net/weixin_40642306/article/details/82595715
今日推荐
周排行