ksh*_*ish 3 c algorithm data-structures
在C中计算后缀表达式时,如果我们的令牌是一个运算符,我们必须将它放在堆栈中,使其具有最高优先级.
我的问题是运营商之间*, /, %,具有最高优先级.
我们还需要考虑关联性吗?由于所有这些运营商都具有LEFT-TO-RIGHT 关联性,因此会/优先于*?
优先级通常仅适用于中缀符号.Postfix(和Prefix)表示法通常被认为是明确指定哪些操作数与哪个运算符相关联.优先级仅在解析中存在歧义时才起作用,而在后缀表示法中则不是这种情况.
中缀表达式中出现的优先级问题
4 * 5 + 3 / 12
Run Code Online (Sandbox Code Playgroud)
转换为RPN表单后根本不存在
4 5 * 3 + 12 /
Run Code Online (Sandbox Code Playgroud)
或前缀形式
(/ (+ (* 4 5) 3) 12)
Run Code Online (Sandbox Code Playgroud)
.
在考虑诸如Shunting-Yard算法之类的东西时,存在一些混淆的可能性,该算法可用于从中间表达式生成RPN表示,或者直接评估中缀表达式.它通过将运算符推迟到辅助堆栈来处理运算符优先级,直到较低优先级运算符强制它被弹出和计算(或输出).