中缀表达式转为后缀表达式并进行计算
发布时间
阅读量:
阅读量
中缀表达式转换为后缀表达式
具体实施流程如下:
-
建立两个栈结构,其中s1用于存放运算符,而s2则用于保存计算过程中的中间结果;
-
按照从左到右的顺序对中缀表达式进行逐个字符的扫描;
-
当识别到操作数时,立即将其压入栈s2;
-
当遇到运算符时,需将其与s1栈顶元素进行优先级比较:
4.1 若s1为空或者栈顶元素为左括号“(”,则直接将该运算符压入s1;
4.2 否则,若当前运算符的优先级高于栈顶运算符,则同样将其压入s1;
4.3 若当前运算符优先级较低或相等,则将s1栈顶的运算符弹出并压入s2中,之后再次返回步骤(4-1),继续与新的栈顶元素进行比较; -
对于括号处理部分:
5.1 若为左括号“(”,则直接将其压入s1;
5.2 若为右括号“)”,则持续弹出s1中的运算符并压入s2,直至遇到对应的左括号为止,此时将这对括号移除不作处理; -
不断重复第2至第5步的操作,直到扫描完整个表达式;
-
在完成所有扫描后,将s1中剩余的所有运算符依次弹出并压入到s2中;
-
最后依次取出s2中的内容并输出,所得序列的逆序即为原中缀表达式转换后的后缀表达式形式。
示例说明:
以中缀表达式“1+((2+3)×4)-5”为例,展示其转化为后缀表达式的具体过程
