3
A
答えて
4
はい、可能です。
S = new empty stack
while not eof
t = read token
if t is a binary operator
y = pop(S)
x = pop(S)
push(S, t(x, y))
else
push(S, t)
print the contents of the stack S
1
だけで、アレイ全体を通して反復して:あなたはoperation token
満たしている場合、あなたは、スタック
push
各number
- 操作- にスタックから
pop
2つの数値を、評価をpush
操作の結果がスタックに戻る
それだけです。このための複雑さは、時間の場合はlinear, O(n)
、スペースの場合はlinear, O(n)
になります。これは、スタックを使用して数値を格納するためです。 全体のコード使用してスタック(JavaScript
):
/*
Function to perform operation with two numbers.
@param {String} Operation type.
@param {Number} Number 1.
@param {Number} Number 2.
@returns {Number} Result of performing the operation.
*/
var performOperation = function performOperation(operation, num1, num2) {
switch (operation) {
case '+': return num1 + num2;
case '-': return num1 - num2;
case '*': return ~~(num1 * num2);
case '/': return ~~(num1/num2);
default: console.error('Unknown operation: ', operation);
}
};
/*
Function to check if variable holds an operation type.
@param {Any} Token.
@returns {Boolean} If token is string with operation type.
*/
var isOperation = function isNumber(token) {
// map of supported operations
var map = {
'+': true,
'-': true,
'*': true,
'/': true
}
return !!map[token];
};
var evaluatePolishNotation = function evaluatePolishNotation(tokens) {
var stack = [];
for (var i = 0; i < tokens.length; i++) {
var token = tokens[i];
if (isOperation(token)) {
var number1 = stack.pop();
var number2 = stack.pop();
stack.push(performOperation(token, number2, number1));
} else {
stack.push(parseInt(tokens[i], 10));
}
}
return stack.pop();
}
しかし、あなたはその一定のスペースOを使用することによって改善することができます(1)!アルゴリズムhereの詳細については、こちらをご覧ください。
関連する問題
- 1. スタックを使用したPostfixの評価。
- 2. スタックを使用した後置評価
- 3. 中置のPostfixへ/逆ポーランド記法
- 4. インフィックスを逆ポーランド記法(Postfix)に変換する方法
- 5. ポーランド語から表記法
- 6. スタック後置記法の評価は中置Calcが
- 7. スタックと評価ポストフィックス
- 8. 正規表現でRPN(逆ポーランド記法)または後置記記を導くことができます
- 9. 評価バーの使用方法評価バー?
- 10. スタックを使用してプレフィックス式を評価する
- 11. C++でスタックを使用してPostfixの式を評価する
- 12. ポストフィックス表記を評価する
- 13. 上記の評価を表示
- 14. ポーランド語表記の実装
- 15. ポーシング表記の評価関数
- 16. C++逆ポーランド記法ファイルから読み取る
- 17. MATLABでの逆評価
- 18. セレンを使用した画像評価
- 19. ROC曲線を使用した評価
- 20. プロシージャを使用した短絡評価
- 21. Djangoモデルシステムを使用した評価
- 22. Javaでスタックを使った式の評価
- 23. Shunting Yard(逆ポーランド記法/後置記号)演算子の優先順位
- 24. スタックで式を評価する
- 25. twig表現の評価方法
- 26. 評価の一覧をjavaのストリームを使用した平均評価のリスト
- 27. ベンチマークを使用してプログラムのパフォーマンスを評価する方法
- 28. ツリーを使用してブールステートメントを評価する方法++
- 29. CNTK eval apiを使用してミニバッチ評価を行う方法
- 30. 評価バーのWebサービスから評価を表示する方法
はい、スタックに[7 2 8]があります(下から上に) - 演算子が不足しているため、式が完全に折りたたまれません。 'dc'を使ってこれをチェックすることができます:' 6 2 3 + - 3 8 2/+ * 2 5 3 + f'はあなたのRPN表現を評価し、スタック( 'f')をダンプします。 (しかし、これは実際にはプログラムに関する質問ではありません...) – nneonneo
プログラミングに関するものではないので、この質問を議論の対象外とすることに投票しました.- RPN式の評価についてのみです。 – nneonneo