สรุป
โดยโอเปอเรเตอร์ก็คือเครื่องหมายการคำนวณต่างๆ
เช่น + - * / ในขณะที่ตัวโอเปอแรนด์ซึ่งเป็นตัวถูกดำเนินการนั้น
อาจเป็นได้ทั้งตัวแปรหรือค่าคงที่ใดๆ โดยนิพจน์ทางคณิตศาสตร์
สามารถนำเสนอให้แตกต่างกันได้ถึง 3 รูปแบบ ด้วยกัน ดังนี้
1. นิพจน์ Infix
นิพจน์คณิตศาสตร์ที่อยู่ในรูปแบบของ Infix นั้น ก็คือนิพจน์
โดยทั่วไปที่เรามักใช้กับการคำนวณสูตรตัวเลขต่างๆ โดย
โอเปอเรเตอร์จะอยู่ระหว่างตัวโอเปอแรนด์
2. นิพจน์ Postfix
นิพจน์คณิตศาสตร์ที่อยู่ในรูปแบบของ Postfix นั้น คือ
นิพจน์ในรูปแบบที่โอเปอเรเตอร์จะอยู่ข้างหลังตัวโอเปอแรนด์
3. นิพจน์ Prefix
นิพจน์คณิตศาสตร์ที่อยู่ในรูปแบบของ Prefix จะตรงกันข้าม
กับ Postfix โดยจะนำโอเปอเรเตอร์ไปไว้อยู่ข้างหน้าตัวโอเปอแรนด์
สำหรับนิพจน์ทั้งสามรูปแบบ สามารถแสดงได้ตามตัวอย่างข้างล่างดังนี้
Prefix : +AB
Infix : A+B
Postfix : AB+
อัลกอริทึมการแปลงนิพจน์ Infix มาเป็นนิพจน์ Postfix มีขั้นตอน ดังนี้
1. ถ้าข้อมูลเข้าเป็นโอเปอแรนด์ ให้เอาต์พุตไป Postfix
2. ถ้าข้อมูลเข้าเป็นโอเปอเรเตอร์
2.1 ถ้าสแตกว่าง ให้ push ลงในสแตก
2.2 ถ้าภายในสแตกมีข้อมูลอยู่ ให้ทำการเปรียบเทียบ ดังนี้
2.3 ถ้าโอเปอเรเตอร์ที่อินพุตเข้ามามีลำดับความสำคัญน้อยกว่า
หรือเท่ากับ โอเปอเรเตอร์ที่อยู่ส่วนบนของสแตก ให้ดำเนินการ pop
สแตกออกไปที่ postfix โดยทำการเปรียบเทียบกับโอเปอเรเตอร์ที่มี
อยู่ในสแตกไปเรื่อยๆ จนกระทั่งโอเปอเรเตอร์ที่อินพุตเข้ามามีลำดับ
ความสำคัญมากกว่าโอเปอเรเตอร์ในสแตก จากนั้นให้ดำเนินการ push
โอเปอเรเตอร์ที่อินพุตเข้ามาลงในสแตก
2.4. ถ้าโอเปอเรเตอร์ที่อินพุตเข้ามามีลำดับความสำคัญมากกว่า
โอเปอเรเตอร์ที่อยู่ส่วนบนของสแตกให้ดำเนินการ push โอเปอเรเตอร์
นั้นลงในสแตก
3. ถ้าข้อมูลเข้าเป็นเครื่องหมายวงเล็บเปิด ให้ดำเนินการ push
ลงในสแตก
4. ถ้าข้อมูลเข้าเป็นเครื่องหมายวงเล็บปิด ให้ดำเนินการ pop สแตก
ไปยัง postfix จนกระทั่งพบเครื่องหมายวงเล็บเปิด จากนั้นให้นำ
เครื่องหมายวงเล็บทั้งสองทิ้งไป
5. หากดำเนินการจนเสร็จสิ้นแล้วยังคงมีข้อมูลอยู่ในสแตก ให้ดำเนินการ
pop สแตกที่เหลืออยู่ทั้งหมดไปที่ postfix
ไม่มีความคิดเห็น:
แสดงความคิดเห็น