เราต้องสร้างเครื่องคิดเลขด้วยวิธีป้อนข้อมูล RPN (reverse polish notation) โดยใช้ Stacks ใน JavaScript
พิจารณาอาร์เรย์อินพุตต่อไปนี้ -
const arr = [1, 5, '+', 6, 3, '-', '/', 7, '*'];
กระบวนการ -
-
1 คือตัวถูกดำเนินการ ให้กดไปที่ Stack
-
5 คือตัวถูกดำเนินการ ให้กดไปที่ Stack
-
'+' เป็นโอเปอเรเตอร์ ป๊อป 1 และ 5 คำนวณและผลักผลลัพธ์ไปที่สแต็ก
-
6 เป็นตัวถูกดำเนินการ ให้กดไปที่ Stack
-
3 เป็นตัวถูกดำเนินการ ให้กดไปที่ Stack
-
'−' คือโอเปอเรเตอร์ ป๊อป 6 และ 3 ลบออกแล้วส่งผลลัพธ์ไปที่สแต็ก
-
'/' เป็นโอเปอเรเตอร์ ป๊อป 6 และ 3 แบ่งออกแล้วผลักผลลัพธ์ไปที่สแต็ก
-
7 เป็นตัวถูกดำเนินการ ให้กดไปที่ Stack
-
'*' เป็นโอเปอเรเตอร์ ป๊อป 2 และ 7 คูณมันแล้วผลักผลลัพธ์ไปที่สแต็ค
และสุดท้ายผลลัพธ์ควรเป็น −
const output = 14;
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
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)); ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
[14]