Cái này có thuật toán là dùng stack để lưu operator đó bạn. Ví dụ: 2 + 3 * 7
Mã:
Cursor Stack Postfix
2 2
+ + 2
3 + 2 3
* + * 2 3
7 + * 2 3 7
Cuối cùng là pop hết những gì trong stack ra, kết quả là
2 3 7 * +
Tóm tắt có thể như sau:
- Gặp số là in ra.
- Nếu stack trống hoặc là có dấu ( ở đầu stack thì push operator tiếp theo vào stack.
- Nếu gặp dấu ( thì push vào stack.
- Nếu gặp dấu ) thì pop stack tới khi gặp dấu ( thì ngưng.
- Nếu gặp dấu có ưu tiên cao hơn đầu stack thì đưa nó vào stack.
- Nếu gặp dấu có ưu tiên bằng đầu stack thì pop stack và đưa dấu mới vào.
- Nếu gặp dấu có ưu tiên thấp hơn đầu stack thì pop stack rồi so sánh đầu stack mới với dấu hiện tại.
- Cuối cùng, stack còn bao nhiêu thì pop nó ra hết.
Mình nghĩ bạn nên làm bằng tay trước nhiều trường hợp cho hiểu rồi hay code nhé.