Chúng ta cần tạo một máy tính với phương thức nhập RPN (ký pháp Ba Lan ngược) sử dụng Stack trong JavaScript.
Xét mảng đầu vào sau:
const arr = [1, 5, '+', 6, 3, '-', '/', 7, '*'];
Quy trình:
- 1 là toán hạng, đẩy vào Stack.
- 5 là toán hạng, đẩy vào Stack.
- '+' là toán tử, lấy 1 và 5, tính toán và đẩy kết quả vào Stack.
- 6 là toán hạng, đẩy vào Stack.
- 3 là toán hạng, đẩy vào Stack.
- '-' là toán tử, lấy 6 và 3, trừ chúng và đẩy kết quả vào Stack.
- '/' là toán tử, lấy 6 và 3, chia chúng và đẩy kết quả vào Stack.
- 7 là toán hạng, đẩy vào Stack.
- '*' là toán tử, lấy 2 và 7, nhân chúng và đẩy kết quả vào Stack.
Và cuối cùng, đầu ra sẽ là:
const output = 14;
Ví dụ
Mã thực hiện:
const arr = [1, 5, '+', 6, 3, '-', '/', 7, '*'];
const stackCalculator = (arr = []) => {
const options = {
'+': (a, b) => a + b,
'-': (a, b) => a - b,
'*': (a, b) => a * b,
'/': (a, b) => a / b
};
const stack = [];
arr.forEach(value => {
stack.push(value in options
? options[value](...stack.splice(-2))
: value
);
});
return stack;
};
console.log(stackCalculator(arr));
Kết quả
Kết quả trong console:
[14]