当前位置: 首页 > 面试题库 >

后缀到后缀的括号最少

许子平
2023-03-14
问题内容

我正在寻找后缀符号表示法的算法,该算法将产生最小数量的括号。

我发现它会产生很多括号:http : //tajendrasengar.blogspot.com/2011/09/postfix-to-
infix-algorithm.html

例如

输入:

<ONP>abcd*/+~

结果:

<INF>~(a+b/(c*d))

问题答案:

如果您确实希望尽可能地减少括号,则需要执行的操作与链接的算法类似。然而…

  • 您应该为中的每个 复合 操作数存储一个运算符Stack。即,操作数中使用的最后一个运算符。您可以Stack为此花一秒钟。如果操作数不是复合数,则可以添加null到第二个Stack,因为没有运算符。
  • 不要将结果String用括号括起来。这是在算法的其他地方完成的(请参见下文)。

从每个Stacks 弹出顶部的两个值时,手边有3个运算符:

  • 当前的运营商
  • 第一个操作数中最后使用的运算符(如果该运算符存在)
  • 第二个操作数中最后使用的运算符(如果该运算符存在)

取决于这三个运算符,在组合它们之前,应该用括号封装第一个和/或第二个操作数。

您可以使用运算符优先级来确定是否应包含括号。顺序如下:(none), {"*", "/"}, {"+", "-"}

  • 当且仅当第一个操作数的运算符的优先级低于当前运算符的优先级时,才需要括号。
  • 第二个操作数需要括号如果操作者具有比当前操作者一个低优先级,或如果它们具有相同的优先级,其中电流运算符为"/""-"

其余应按照算法描述的方式进行。



 类似资料:
  • 我在互联网上搜索了一个很好的实现,它不是把数字表达式,而是把变量表达式从中缀符号转换成前缀和后缀。我做的所有搜索都没有成功。基本上,我想看看PHP中是否有任何实现,这样我就可以修改它以支持更多的操作符,而不仅仅是(-,*,=)。 例如转换: 同时保留变量名,不必输入数字进行计算。

  • 你好,Stack,我现在正想写一个RPN转换器,我是C新手。但是我遇到了问题。希望我能详细解释这些问题。我使用数组来堆叠运算符。当我开始讨论以下问题时,让我们使用示例“5 8”: 出于某种原因,它会将运算符推到堆栈上,但不会将运算符添加到后缀字符串变量中,因为我也在添加我的元素。我看了一下我的pop函数,这似乎是正确的,但我很困惑。如果你能把我引向正确的方向那就太好了。 这是我的完整代码: 另外,

  • 对于类,我们的任务是使用“抽象中的双链接列表堆栈实现”将中缀表达式转换为后缀。我能够编写一个使用堆栈进行转换的程序,但是双链表的用途是什么?我们将向列表中添加哪些信息节点? 这是作为示例提供给我们的堆栈类。为什么下一个变量是Stack类型?不应该是节点吗? 如果我创建双向链表和节点类,节点对象中有什么数据?

  • 我的讲师给了我一个任务,创建一个程序,使用堆栈将中缀表达式转换为后缀。我制作了堆栈类和一些函数来读取中缀表达式。 但是这个名为inToPos(charstring[])的函数正在创建断点,该函数负责使用堆栈将字符串中缀中的中缀表达式转换为字符串后缀中的后缀表达式。你们能帮帮我,告诉我我做错了什么吗? 这些是我的代码,非常需要您的帮助:) 注:inToPos功能是使用以下算法实现的: 从左到右扫描中

  • 为数字添加序号后缀。 使用模运算符(%)来查找各位和十位的值。查找哪些序号模式数字匹配。如果数字在十位模式中找到,请使用十位的序数。 const toOrdinalSuffix = num => { const int = parseInt(num), digits = [int % 10, int % 100], ordinals = ['st', 'nd', 'rd', '

  • Web API 的常见模式是在 URL 上使用文件扩展名来为给定的媒体类型提供端点。 例如,'http://example.com/api/users.json' 用于提供 JSON 表示。 在 URLconf 中为你的 API 添加 format-suffix 模式是容易出错和非 DRY 的,因此 REST framework 提供了将这些模式添加到 URLconf 的快捷方式。 format_