我必须将非完全加括号的序列从中缀转换为后缀。这也需要使用堆栈。有一个堆栈用于存储操作员。我需要确定运算符的优先级,以确保将适当的运算符打印在转换的后缀序列中的正确位置上。这里是伪代码:确定数学运算符的优先顺序
do if(下一个输入是左括号) 读取左括号并将其推入堆栈。 else if(下一个输入是数字或其他操作数) 读取操作数并将其写入输出。 else if(下一个输入是其中一个操作符号) 弹出和打印操作直到出现以下三种情况之一:(1) 堆栈变空,(2)堆栈上的下一个符号为左括号 或(3)堆栈中的下一个符号的优先级低于下一个输入符号的优先级为 的操作。当其中一种情况发生时,停止弹出,读取下一个输入符号 ,并将此符号推入堆栈。 } else 读取并丢弃下一个输入符号(应该是右括号)。 从堆栈中弹出并打印操作,直到堆栈中的下一个符号为 左括号。 (如果没有遇到左括号,则打印一条错误消息 ,指示不平衡的圆括号并停止。)最后,弹出并丢弃左括号。 } while(there is more of the expression to read);
加粗的文字对我来说是令人困惑的部分。有没有人有对此方法的建议?让我知道,如果需要更多的信息....
我认为这是算法/数据结构作业吗?无论如何,我不确定混淆粗体文本是什么 - 简而言之,它告诉你将低优先级操作符留在堆栈上,并在其上添加下一个输入符号/标记。通过这种方式,您可以将操作员从堆栈中弹出并按照正确的顺序到达。是否由于对运算符优先级缺乏理解而产生混淆?几乎所有的语言都清楚地记录了这一点;例如,Java有一个[你可以参考的表](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html)。 –