我最近接到了一项任务,使用 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.
}
}
}
}
}
请有人解释为什么它不能按预期运行。