【问题标题】:Prefix to Infix Conversion Algorithm with figure带图的前缀到中缀转换算法
【发布时间】:2011-05-21 10:29:47
【问题描述】:


经过谷歌搜索,我找到了!

中缀前缀

该算法是一种非尾递归方法。 反转的输入字符串被完全压入堆栈。

prefixToInfix(stack)
   1) IF stack is not empty
     a. Temp -->pop the stack
     b. IF temp is a operator
       i. Write a opening parenthesis to output
       ii. prefixToInfix(stack)
       iii. Write temp to output
       iv. prefixToInfix(stack)
       v. Write a closing parenthesis to output
    c. ELSE IF temp is a space -->prefixToInfix(stack)
    d. ELSE
       i. Write temp to output
       ii. IF stack.top NOT EQUAL to space -->prefixToInfix(stack)

当栈顶为

F(ABC)

我们进入算法,“A”被写入输出,因为它是当前的值

temp=A(比如说)

现在我如何根据算法在输出列上获得“-”,下一个临时值将是“B”,它是在最后一次递归调用后从堆栈中弹出的。 图表如何显示输出“((A-” ...

我在哪里做不正确的假设? 有人能麻烦解释一下吗?

【问题讨论】:

  • 你不会从 F(ABC) 得到“-”。

标签: algorithm recursion stack prefix infix-notation


【解决方案1】:

我不太明白你的问题。

如果你的堆栈是ABCF(ABC) 弹出 A,进入分支 d.i。并将 A 写入输出,然后进入 d.ii。并执行F(BC),最终将B和C都写入输出。

如果你想让你的输出看起来像它在图表上的样子,你需要你的堆栈是* - A B C(注意每个元素之间的空格!)。

编辑:

(顺便说一句:所有这些都比描述的更容易,所以我建议您将算法编写为程序并在您选择的调试器中启动它。)

好的,所以你已经将第一个 * 存储在 temp (a) 中,写了一个 ( (b.i.),并使用剩余的堆栈调用了算法 (b.ii.)。这会丢弃一个空白,然后将- 存储在下一个分支的temp 中,写入(,然后使用剩余的堆栈调用算法。在某些时候,你最终会进入 d.ii.,你刚刚写了一个 A 来输出,给你

((A

剩下的栈是

_B_C

顶部有一个空格,B 和 C 之间有另一个空格。
所以现在d.ii。找到空间并且不再做任何事情:这个控制分支完成了,我们回到我们来自的地方,也就是 d.ii。在您的 - 控制分支中。您将- 写入d.iii. 处的输出,在d.iv. 处使用剩余堆栈(_B_C) 调用算法,然后就可以编写B)、@ 987654338@ 和 C 和最后一个 )

只要记住你从哪里来,这样你就知道在当前递归完成后要跳回哪里。

【讨论】:

  • @Christian:是的,我刚刚发现,但即使在输出列上写了“A”之后,我也得到了一个调用分支“c”的 BLANKSPACE。然后我得到“B”,它被复制到 Temp 然后执行 d.ii。被写入输出列...不反映图片...我还是想不通。
  • @Tuhin:您的堆栈中需要运算符 *-
  • 图片有误。从 f(a_b_c) 应该回到 f(-_a_b_c) 而不是 f(_a_b_c),然后输出“-”并调用 f(_b_c)
  • @Christian:我的堆栈如下 Stack[*, ,-, ,A, ,B, ,C] 见分支 d.ii。据说“IF stack.top NOT EQUAL to space -->prefixToInfix(stack)”...但是我在 A 之后的当前堆栈顶部是 BLANKSPACE 。那么现在控件将从分支 d.i. 转到哪里(在输出列上写 A 之后)
  • @Christian:我至少做了 4 次 DRYRUN,但发现算法返回的 OUTPUT 为 ((AB)... 而没有如图所示的所需 OUTPUT... 你亲自检查过吗算法的输出是它编写的正确算法。我发现它不起作用......你说什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
相关资源
最近更新 更多