0

我最近接到了一项任务,使用 javascript 将任何代数表达式从 inorder 转换为 postorder。我一直在遵循本指南来理解这个概念,然后尝试创建完成我的任务所需的代码。

http://scriptasylum.com/tutorials/infix_postfix/algorithms/infix-postfix/

这是我的完整示例:

http://wwwlab.iki.his.se/~a12aleny/PVU/

用于完成任务的代码,忽略注释,这只是瑞典语的胡言乱语:

var string = "";

function in2Post() {
var equation = document.getElementById('inputin2post').value;
console.log(equation);
var stack = new Stack();
string = "";
for (var i = 0; i < equation.length; i++) {
    var re = /[a-z]/;
    var status = re.test(equation.charAt(i));
    if (status === true) {
        string = string + equation.charAt(i);
    } else {
        if (stack.getlength() == 0) {
            stack.push(equation.charAt(i));
        } else {
            stack.compareOp(equation.charAt(i));
        }
    }
}
for(var i = 0; i <= stack.getlength();i++){
    string = string + stack.pop();
    console.log("bug");


}
var result = document.getElementById("result");
result.innerHTML = string;
console.log(string);

}
function Stack() {
this.stac = new Array();
this.pop = function () {
    return this.stac.pop();
}
this.push = function (item) {
    this.stac.push(item);
}
this.getlength = function () {
    return this.stac.length;
}
this.compareOp = function (operator) {
    var topOfStack = this.stac.pop(); //Hämta operatorn överst i stacken.
    if (operator == "+" || operator == "-") { //Om operatorn som skannas är ett plus eller minus.
        if (topOfStack == "-" || topOfStack == "+" || topOfStack == "*" || topOfStack == "/") { //om operatorn överst i stacken är plus, minus, gånger eller division.
            string = string + topOfStack; //lägg den poppade operatorn i string.
            if (this.stac.length == 0) { //Om stacken är tom.
                this.stac.push(operator); //Lägg på operatorn på stacken.
            } else {
                this.stac.compareOp(operator); //Om den inte är tom, kör funktionen igen med samma operator.
            }

        }
    } else if (operator == "*" || operator == "/") { //Om operatorn är gånger eller division.
        if (topOfStack == "+" || "-") { // om toppen av stacken är plus eller minus.

            this.stac.push(topOfStack);
            this.stac.push(operator); //Lägg operatorn på stacken.

        }
        else if(topOfStack == "*" || topOfStack == "/"){ // Om toppen av stacken är gånger eller division.
            string = string + topOfStack; // Lägg toppen av stacken i strängen.
            if (this.stac.length == 0) { //Om stacken är tom.
                this.stac.push(operator); //Lägg på operatorn på stacken.
            } else {
                this.stac.compareOp(operator); //Om den inte är tom, kör funktionen igen med samma operator.
            }

        }
    }
}
}

请有人解释为什么它不能按预期运行。

4

1 回答 1

1

我过去一直在玩它。我在这里完成了:

您需要 execution_order 函数。

http://www.ccesp.puc-rio.br/mostrapuc/imgs/logo/mc/mathcaio/math.js

于 2014-03-15T02:13:16.810 回答