else if c == notPushc; else ifc==+c==-双目运算加减法 while charnotPeek != cal1;
这段代码是一个中缀表达式转后缀表达式的过程。具体的运行过程如下:
-
首先定义一个栈not来存储操作符,一个栈num来存储数字。
-
循环读入中缀表达式的每一个字符c。
-
如果c是数字,直接将其压入num栈。
-
如果c是左括号'(',则将其压入not栈。
-
如果c是双目运算符(加减乘除),则需要将not栈中所有优先级比c高的操作符都弹出到num栈中,直到遇到第一个优先级比c低的操作符或者遇到左括号'('为止,再将c压入not栈。
-
如果c是幂运算符'^',则需要将not栈中所有优先级比c高的操作符都弹出到num栈中,直到遇到第一个优先级比c低的操作符为止,再将c压入not栈。
-
如果c是右括号')',则需要将not栈中所有操作符弹出到num栈中,直到遇到左括号'('为止,并将左括号弹出。
-
循环结束后,将not栈中所有剩余的操作符都弹出到num栈中。
-
最终得到的num栈中的元素就是后缀表达式的逆序排列。
-
将num栈中的元素逆序弹出,就得到了正确的后缀表达式。
原文地址: https://www.cveoy.top/t/topic/gesu 著作权归作者所有。请勿转载和采集!