Postfix表达式评估:需要多少堆栈内存?

时间:2014-02-02 22:48:17

标签: c stack theory postfix-notation

我觉得这是一个非常愚蠢的问题,但我找不到答案。

假设我们要评估一个后缀表达式,该表达式包含具有不同arity的各种运算符(例如ADD,SUB和其他可以使用N个操作数的运算符)。评估使用这些运算符构建的后缀表达式需要多少堆栈内存(就元素数量而言)?

有没有办法确定所需的内存量?

编辑:似乎这个问题有点含糊不清。我要问的是,这种操作需要的堆栈元素的最大数量是多少?甚至可以计算它还是可以无限多并且取决于表达式?

2 个答案:

答案 0 :(得分:1)

没有固有的最大值。这完全取决于您正在评估的表达方式。

答案 1 :(得分:1)

这取决于表达方式。二进制表达式的经典递归解决方案类似于(在C代码中):

int maxstack(expression *exp) {
    if (IsLeaf(exp)) {
        return 0;
    } else {
        int left_stack = maxstack(exp->left);
        int right_stack = maxstack(exp->right);
        if (left_stack == right_stack)
            return left_stack + 1;
        else if (left_stack > right_stack)
            return left_stack;
        else
            return right_stack;
    }
}

将此扩展为三元/一元表达式是相对简单的