中缀表达式的计算
- 初始化两个栈,数字栈放操作数,运算符栈放运算符(+ - * / ( ) )
- 遍历中缀表达式,数字直接入栈
- 如果是符号
- 符号栈为空或者str[i]是一个左括号,str[i]直接入栈
- str[i]是右括号,则计算到左括号的位置,并弹出左括号
- str[i]是运算符,则判断优先级,当str[i]大,则直接入栈;当栈顶的元素优先级大,则循环计算,直到符号栈顶元素优先级小于str[i].
- str[i]入符号栈
经过优化后的代码
#include <iostream>
#include <stack>
using namespace std;
stack<char> CS;
stack<double> NS;
void compute(){
double num2=NS.top();
NS.pop();
double num1=NS.top();
NS.pop();
switch (CS.top())
{
case '+':
NS.push(num1+num2);
CS.pop();
/* code */