【问题标题】:Stacks convertion from postfix to infix堆栈从后缀到中缀的转换
【发布时间】:2013-03-28 13:41:50
【问题描述】:

您好,我正在练习一些 Java 堆栈,并且正在尝试解决有关堆栈的问题。我试图编写一个采用后缀表示法并将其转换为中缀的方法。这是我到目前为止所拥有的:

`
public void convertion() {
        Stack<Integer> stack;          // For evaluating the expression.
        stack = new Stack<Integer>();  // Make a new, empty stack.

        Scanner scan = new Scanner(postfix);

        int t1, t2 = 0;     //Operands

        boolean check = false;


        while (scan.hasNext() && !check) {
            if (scan.hasNextInt()) {
                int operand = scan.nextInt();
                stack.push(operand);
            } else {
                char operator = scan.next().charAt(0);
                try {

                        while(stack.)


                } catch (EmptyStackException e) {
                    answer = "Malformed postfix expression";
                    check = true;
                }

            }
        }
        scan.close();
        try {
            answer = "" + stack.pop();
        } catch (EmptyStackException e) {
            answer = "Malformed postfix expression";
        }
    }
`

我遇到问题的部分是我应该在尝试部分上放什么。基本上我将找到的所有数字都推入堆栈,但是一旦我找到一个运算符,我如何合并两个操作数和运算符。

谢谢。

【问题讨论】:

  • 这是一个很好的例子,首先使用纸和铅笔来制定算法。尝试一些后缀表达式。跟踪堆栈的状态,并查看它与所需输出的关系。我不明白你为什么只把整数放在你的堆栈上。

标签: java stack postfix-notation


【解决方案1】:

你想弹出栈顶的两个元素,对它们执行适当的操作,然后推回结果:

try {
    int o1 = stack.pop().intValue();
    int o2 = stack.pop().intValue();
    switch (operator) {
        case '+': stack.push(new Integer(o1 + o2));
                  break;
        case '-': stack.push(new Integer(o1 - o2));
                  break;
        ...
    }
}
catch (EmptyStackException e) {
    ...

【讨论】:

  • 他没有评估。他正在将后缀转换为中缀。
猜你喜欢
  • 2015-09-12
  • 2015-09-13
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 2013-02-26
  • 2012-09-22
  • 2015-04-19
相关资源
最近更新 更多