อัลกอริทึมการแปลงนิพจน์ Infix เป็น นิพจน์ Postfix


แปลงนิพจน์ Infix เป็น นิพจน์ Postfix

ลกอริทึมการแปลงนิพจน์ Infix เป็น นิพจน์ Postfix

 นิพจน์ A / B + (C – D)

เราสามารถแปลงนิพจน์ Infix ให้เป็น Postfix ได้โดยอาศัยสแตคที่มีคุณสมบัติการเข้าหลังออกก่อนหรือ LIFO โดยมีอัลกอริทึมในการแปลงนิพจน์ ดังนี้

1.
ถ้าข้อมูลเข้า (input) เป็นตัวถูกดำเนินการ (operand) ให้นำออกไปเป็นผลลัพธ์ (output)

2.
ถ้าข้อมูลเข้าเป็นตัวดำเนินการ (operator) ให้ดำเนินการดังนี้
2.1
ถ้าสแตคว่าง ให้ push operator ลงในสแตค
2.2
ถ้าสแตคไม่ว่าง ให้เปรียบเทียบ operator ที่เข้ามากับ operator ที่อยู่ในตำแหน่ง TOP ของสแตค
2.2.1
ถ้า operator ที่เข้ามามีความสำคัญมากกว่า operator ที่ตำแหน่ง TOP ของสแตคให้ push ลงสแตค
2.2.2
ถ้า operator ที่เข้ามามีความสำคัญน้อยกว่าหรือเท่ากับ operator ที่อยู่ในตำแหน่ง TOP ของสแตค ให้ pop สแตคออกไปเป็นผลลัพธ์ แล้วทำการเปรียบเทียบ operator ที่เข้ามากับ operator ที่ตำแหน่ง TOP ต่อไป จะหยุดจนกว่า operator ที่เข้ามาจะมีความสำคัญมากกว่า operator ที่ตำแหน่ง TOP ของสแตค แล้วจึง push operator ที่เข้ามานั้นลงสแตค

3.
ถ้าข้อมูลเข้าเป็นวงเล็บเปิด ให้ push ลงสแตค

4.
ถ้าข้อมูลเข้าเป็นวงเล็บปิด ให้ pop ข้อมูลออกจากสแตคไปเป็นผลลัพธ์จนกว่าจะถึงวงเล็บ เปิด จากนั้นทิ้งวงเล็บเปิดและปิดทิ้งไป

5.
ถ้าข้อมูลเข้าหมด ให้ pop ข้อมูลออกจากสแตคไปเป็นผลลัพธ์จนกว่าสแตคจะว่าง

ตัวอย่างการแปลงนิพจน์ Infix เป็นนิพจน์ Postfix
นิพจน์
A + B * C


นิพจน์ (A * B) + (C / D)

นิพจน์ (A + B) * ( C ^ D – E ) * F

 

หมายเลขบันทึก: 180195เขียนเมื่อ 2 พฤษภาคม 2008 13:21 น. ()แก้ไขเมื่อ 6 กันยายน 2013 19:01 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (12)

แล้วถ้าเราจะทำการประมวลผลให้ Postfix เป็นผลลัพธ์หละคะจะทำยังงัย

เราจะเยนโค้ดออกมายังงัยถึงจะประมวลผลออกมาได้ ขอคำชี้แนะหน่อยนะคะ

ขอบคุณค่ะ..*-*

ขอบคุนค่ะ อ่านแล้วเข้าใจมากมาย

ขอบคุณเหมือนกันครับ

ข้างบนใครหว่า CSTU

I CSTU same 5555+

ขอตัวอย่างพร้อมตำตอบหน่อยค่ะ เยอะๆเลย

ถ้า สองค่านี้แปลงไงครับบอกทีครับ รบกวนผู้รู้ ทําให้ดูทีครับ

•ให้แปลงนิพจน์ต่อไปนี้ให้อยู่ในรูปของ post fix

–A+B(C*D/E^2)-F

–N-A-P*(D/C+B)^2

ข้อสุดท้าย ((A + B) * ( C ^ D – E ) * F) เหมือนจะผิดไปนิดนึงนะครับ

a-b * c+d

a*(b+c-d)

a-b*(c+d)

ขอคำตอบหน่อยน่ะค่ะ. พลีสสสส

a-b * c+d ตอบ a-b * c+d

a*(b+c-d) ตอบ a b c + d - *

a-b*(c+d) ตอบ a b c d + * -

ตรวจคำตอบได้ที่นี้ได้เลยนะครับ http://www.mathblog.dk/tools/infix-postfix-convert...

a^b^(c+d) ขอบคำตอบหน่อยค้าบพอดีไม่แน่ใจว่าทำถูกรึป่าว

นิพจน์(A + C) * F ขอคำตอบหน่อยนะคะ

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท