当前位置: 首页 > 知识库问答 >
问题:

Java:计算后缀表达式

慕容玉堂
2023-03-14

这是一个理论上的问题:

我必须计算一个表达式,我已经从中缀转换到后缀。后缀保存在队列中,因为我希望避免使用字符串。这样我就知道数字之间的除法在哪里,我可以按“正确”的顺序访问它。

它看起来是这样的:

// Original expression: 2+(3+1)-(5-3)^2*3-1
Queue: [2.0, 3.0, 1.0, +, +, 5.0, 3.0, -, 2.0, ^, 3.0, *, -,1.0, -]

现在我想用两个堆栈:

    null

如果我到达一个运算符,并且数量计数至少为2,我将执行该操作并将其推到目标堆栈上。到达原始堆栈的末尾(现在是空的),我会把所有的东西都传递给它,然后从头开始,直到只剩下结果。

我现在在问我:

  • 这是一个好方法,还是应该尝试检测NumberNumberOperator类型的所有模式并一次性处理它们?
  • 如果第二个选项是要走的路,如何才能做到这一点?

共有1个答案

丘华翰
2023-03-14

不,你只需要一个堆栈,当你完成后,就没有什么可以“从头开始”的了。

当您出列一个数字时,推送它:当您出列一个运算符时,弹出两个值,用这两个操作数计算运算符,然后推送结果。当您到达输入的末尾时,堆栈中应该只有一个值,即结果。否则,输入格式不正确。

 类似资料:
  • 我正在编写一个程序,要求用户输入后缀表达式,然后将结果输出到表达式。我正试图使用一个单链表来实现这一点,并使用适配器模式来创建一个堆栈。 类、类和实现的代码都是直接从我自己的数据结构书中获得的。因此,类是唯一一个包含我自己的代码(并且有错误)的类。 我以前写过一个程序,它只使用堆栈计算后缀表达式,但这次我对包含的额外类感到困惑。 我肯定我有很多错误,但对我来说最明显的错误是在我的类中,每次我将一个

  • 我试图在1次传递中评估一个内插表达式,而不将其转换为后缀,但它没有为某些表达式提供正确的输出。例如:3-5*10/5 10 , (45 5)-5*(100/10) 5 是否有人能在cpp中为这个问题提供适当的解决方案。 链接到上一个问题:如何使用堆栈在一次扫描中计算中缀表达式? 请不要将其标记为重复,因为我已经尝试了上述给定线程中回答的算法,但没有效果。

  • 我的表达式输入文件(出于测试目的,最后两个应该抛出两个异常): 我的实际输出: 显然,我希望前四个表达式像第一个表达式一样跟随,最后两个表达式显示我的异常消息,但我似乎不知道哪里出错了。

  • 本文向大家介绍中缀表达式转后缀表达式相关面试题,主要包含被问及中缀表达式转后缀表达式时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 对于中缀表达式,遇到操作数直接将其输出,如果遇到操作符和左括号全部压入栈中,若遇到右括号则将栈中元素全部弹出,直到遇到左括号为止。压栈过程中,若遇到其它操作符,从栈中弹出元素直到遇到更低优先级的操作符为止。

  • 题3-3 后缀式计算 题目描述 输入一个后缀表达式,试计算该表达式的结果。 规定:后缀表达式的长度不超过一行(80个字符),以$作为输入结束,操作数、操作符之间用空格分隔,操作符只可能有+、-、*、/四种运算,操作数均为整数且运算过程不超出int型范围。例如:234 34 + 2 * $。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据在一行上输入不超过80个字符的合法的后缀表达式,数据之

  • 代码简介:我必须创建一个类来计算前缀、后缀或中缀表达式。它必须确定它是否是pre/post/infix,并将它们转换为后缀,例如,在从“/x7”转换为“x7/”的代码中,表达式在方法中从“x7/”编辑为“x7/”。这两种方法都很好,在多个示例上进行了测试(没有在这里发布完整的代码和作业,但也不需要它们。所问的问题只是我遇到的一个错误,不要担心,我不是在要求解决我的作业)。还有方法,因为可以有变量,