计算并将前缀转换为中缀

时间:2013-04-10 16:57:47

标签: recursion converter prefix infix-notation stack

我在编写将前缀转换为中缀的程序时遇到了一些严重问题。我已经编写了两个使用堆栈的程序,但执行方式不同 - 一个使用了两个堆栈,另一个使用了一个递归方法。但是由于需求要求它使用两个堆栈(操作数和运算符)并使用递归方法,因此我仍然无法正确地执行此操作。我遇到了严重的问题,将这两个要求可视化在一起。有谁知道算法会是什么样子?如果我可以简单地拥有一个算法,它真的会是一个救生员。 谢谢

1 个答案:

答案 0 :(得分:2)

就是这样。

(define (prefix->infix pre)
  (cond ((list? pre)
         (assert (= 3 (length pre)))
         (let ((operator (list-ref pre 0))
               (operand1 (list-ref pre 1))
               (operand2 (list-ref pre 2)))
           (list (prefix->infix operand1)
                 operator
                 (prefix->infix operand2))))
        (else pre)))

> (prefix->infix '(+ 1 2))
(1 + 2)
> (prefix->infix '(+ 1 (* 2 3)))
(1 + (2 * 3))
> (prefix->infix '(+ (/ 1 4) (* 2 3)))
((1 / 4) + (2 * 3))

它没有显式使用'stacks'(但是递归使用了一个调用堆栈)。