在本文的指导下,我实现了一种算法,用于将算术表达式从中缀转换为后缀表示法和后续计算。
但是我没有设法对算术表达式的正确性进行或多或少的检查。最大 - 巨大的 if-else'ov 拐杖捆绑,检查各种选项。
在我看来,通过将转换算法修改为后缀表示法,可以更合理地实现检查。但是什么都没想到。
告诉我,是否有可能以某种方式调整算法以进行验证?或建议任何其他解决此问题的方法。
在表达式中,从运算符中只能有 +,-,*,/, 和括号。但同时,括号数过多的表达式(例如:) ((1+2)*3)将被视为不正确)。
数字都是整数。
算法:
如果传入元素是一个数字,那么我们将它添加到队列(QUEUE)中。
如果传入元素是运算符(+、-、*、/),那么我们检查:
- 如果堆栈 (STACK) 为空或在顶部 (TOP) 包含左括号,则将传入语句添加 (PUSH) 到堆栈 (STACK)。
- 如果传入的运算符的优先级高于顶部(TOP),则将其压入(PUSH)到堆栈(STACK)上。
- 如果传入运算符的优先级低于或等于顶部 (TOP),则将 POP 弹出到队列 (QUEUE) 直到在顶部 (TOP) 看到优先级较低或左括号的运算符,然后推送 (PUSH)将传入的运算符放入堆栈(堆栈)。
如果传入元素是左括号,则将其压入(PUSH)堆栈(STACK)。
如果传入元素是右括号,则弹出堆栈 (POP) 并将其元素添加到队列 (QUEUE) 直到看到左括号。从堆栈中删除找到的支架 (STACK)。
在表达式结束时将堆栈(POP)弹出到队列(QUEUE)中