Я пытаюсь создать функцию Javascript, которая принимает уравнение Инфикса и преобразует его в уравнение Постфикса. Кажется, что он работает нормально, за исключением того, что он продолжает добавлять «неопределенный» элемент в конечный результат. Это происходит только тогда, когда первый оператор в уравнении НЕ является умножением. Вот пример, чтобы показать, что я имею в виду. https://jsfiddle.net/tskL8o0y/
INFIX: 6 * 2 + 1 ---> POSTFIX: 6, 2, *, 1, +
INFIX: 6/2 + 1 --- > POSTFIX: 6,, 2, /, 1, +
, как вы можете видеть в Postfix для тех, кроме умножения, между 6 и 2 есть пустое пространство массива.
function postFix(expression) {
let expressionA = expression.split(" ");
let operatorStack = [];
let output = [];
for (let i = 0; i < expressionA.length; i++) {
if (isNaN(expressionA[i])) {
if ((operatorStack[operatorStack.length - 1] === '/' || operatorStack[operatorStack.length - 1] === '*' || operatorStack[operatorStack.length - 1] === "^") && (expressionA[i] === '+' || expressionA[i] === "-")) {
output.push(operatorStack[operatorStack.length - 1]);
operatorStack.pop();
operatorStack.push(expressionA[i]);
} else if ((operatorStack[operatorStack.length - 1] === '^') && (expressionA[i] === '*') || (expressionA[i] === '/') || (expressionA[i] === '-') || (expressionA[i] === '+')) {
output.push(operatorStack[operatorStack.length - 1]);
operatorStack.pop();
operatorStack.push(expressionA[i]);
} else {
operatorStack.push(expressionA[i]);
}
} else {
output.push(expressionA[i]);
}
}
for (let i = operatorStack.length - 1; operatorStack.length >= 1; i--) {
output.push(operatorStack[i]);
operatorStack.pop();
}
return output;
}