1 / 26

Chapter 3 - Stack, - Queue,- Infix Prefix Postfix

Chapter 3 - Stack, - Queue,- Infix Prefix Postfix. WATTANAPONG SUTTAPAK Software Engineering, School of Information Communication Technology, University of PHAYAO. จุดประสงค์ บทเรียนที่ 3. เข้าใจถึงความหมายและประโยชน์ของ stack

Download Presentation

Chapter 3 - Stack, - Queue,- Infix Prefix Postfix

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 3- Stack, - Queue,- Infix Prefix Postfix WATTANAPONGSUTTAPAK Software Engineering, School of Information Communication Technology, University of PHAYAO

  2. จุดประสงค์ บทเรียนที่ 3 เข้าใจถึงความหมายและประโยชน์ของ stack สามารถนำความรู้เรื่อง stack ไปใช้แก้ปัญหาทางคอมพิวเตอร์ได้ เข้าใจถึงความหมายและประโยชน์ของ queue สามารถนำความรู้เรื่อง queueไปใช้แก้ปัญหาทางคอมพิวเตอร์ได้ เข้าใจถึงหลักการ prefix infix postfix ได้ สามารถเขียนโปรแกรมเพื่อแปลงค่าสลับระหว่าง prefix infix postfix ได้

  3. Stack • ชื่อภาษาไทยกองซ้อน[4] • หลักการทำงานของ stack คือ LIFO(last in first out) • ตัวอย่างการประยุกต์ใช้ stack • การแปลงนิพจน์คำนวณของคอมพิวเตอร์ • การคำนวณค่าจาก function recursion ของคอมพิวเตอร์ • การแก้ปัญหาทางคอมพิวเตอร์อื่นๆ เช่น tower of hanoi • stack สร้างขึ้นมาเพื่อช่วยให้การแก้ปัญหาทางคอมพิวเตอร์ง่ายขึ้น

  4. Stack 3 2 1 Last in First out การทำงานของ stack คือ เข้าก่อนออกทีหลัง หรือ เข้าทีหลังออกก่อน

  5. Stack • Exercise 1 • สร้าง class stack ด้วย Array หรือ ArrayListให้ตั้งชื่อ class ว่าMyStack • โดยกำหนดให้ method push() เพิ่ม item • method pop() ดึง item ออก • กำหนดให้ข้อมูลเป็นดังนี้ • push(0) push(1) push(1) push(2) push(3) push(4) • pop() push(5) push(6) pop() push(7) pop() push(8) • print ค่า array ทั้งหมดใน stack • จะต้องได้ 0 1 1 2 3 5 8

  6. Stack • Exercise 2 • ให้ใช้ class Stack • โดยกำหนดให้ method push() เพิ่ม item • method pop() ดึง item ออก • กำหนดให้ข้อมูลเป็นดังนี้ • push(0) push(1) push(1) push(2) push(3) push(4) • pop() push(5) push(6) pop() push(7) pop() push(8) • print ค่า array ทั้งหมดใน stack • จะต้องได้ 0 1 1 2 3 5 8

  7. Queue • ชื่อภาษาไทยแถวคอย [4] • หลักการทำงานของ queue คือ FIFO(first in first out) • ตัวอย่างการทำงานของ queue • การเก็บสถานการณ์พิมพ์ของเครื่องพิมพ์ • การเข้าคิวต่างๆ เช่น ซื้ออาหาร ซื้อตั๋วหนัง เข้าคิวธนาคาร

  8. Queue 3 2 1 FIFO (First in First out) การเข้าออกเป็นไปตามลำดับก่อนหลัง นั่นคือ เข้าก่อนออกก่อน เข้าหลังออกหลัง

  9. Queue • Exercise 3 • สร้าง class queue ด้วย Array หรือ ArrayListให้ตั้งชื่อ class ว่าMyQueue • โดยกำหนดให้ method enqueue() เพิ่ม item • method dequeue() ดึง item ออก • กำหนดให้ข้อมูลเป็นดังนี้ • enqueue(10) enqueue(8) enqueue(1) enqueue(2) enqueue(3) • dequeue() enqueue(4) dequeue() enqueue(5) • จะต้องได้ 1 2 3 4 5

  10. infix prefix postfix • infix notation หมายถึง รูปแบบการเขียนตัวเลขและเครื่องหมายในรูปแบบปกติ เช่น (a+b)*(c-d) หรือ (3+5)*(4-3) • prefix notation(Polish notation) หมายถึงรูปแบบการเขียนตัวเลขและเครื่องหมายในรูปแบบให้เครื่องหมายอยู่ด้านหน้าตัวเลข เช่น *+ab-cd หรือ *+35-43 • postfix notation(Reverse Polish notation) หมายถึงรูปแบบการเขียนตัวเลขและเครื่องหมายในรูปแบบให้เครื่องหมายอยู่ด้านหลังตัวเลข เช่น ab+cd-* หรือ 35+43-*

  11. prefix? postfix? แล้วจะกลับเครื่องหมายไปหน้าไปหลังทำไม ? • infix เป็นรูปแบบที่มนุษย์ใช้อ่านและคิดคำนวณ • แต่สำหรับคอมพิวเตอร์ รูปแบบที่ง่ายคือ prefix และ postfix

  12. prefix (5*6)+7 = 5*6+7 infix -> prefix เริ่มจากความสำคัญสูงสุดนั่นคือ 5*6 นำเครื่องหมายมาด้านหน้าตัวเลขจะได้เป็น *56 ให้ *56 = x จะได้ x + 7 นำเครื่องหมายไว้ด้านหน้าจะได้เป็น +x7 แทนค่า x ด้วย *56 จะได้ +*567 เป็นคำตอบ คำตอบคือ +*567

  13. prefix 5*6+7 infix -> prefixby Stack วิธีการจะเริ่มจากด้านซ้ายไปขวาโดยให้ความสำคัญของเครื่องหมายสูงสุดก่อน + * 6 7 5

  14. prefix +*567 prefix ->infix เริ่มจากด้านซ้ายไปขวา หาเครื่องหมายที่ตามด้วยตัวเลขสองตัว นั่นคือ *56 นำเครื่องหมายมาไว้ตรงกลางจะได้ 5*6 แทนค่า 5*6 ด้วย x จะได้ +x7 นำเครื่องหมายมาไว้ตรงกลางจะได้ x+7 แทนค่า x ด้วย 5*6 จะได้ 5*6+7 คำตอบคือ 5*6+7

  15. prefix +*567 prefix ->infixby Stack วิธีการจะเริ่มจากด้านขวาไปซ้าย(หลังไปหน้า) 6 5 7 * +

  16. prefix +*567 prefix ->infixby stack วิธีการจะเริ่มจากด้านขวาไปซ้าย(หลังไปหน้า) 37 30 + 7

  17. postfix (5*6)+7 = 5*6+7 infix -> postfix เริ่มจากความสำคัญสูงสุดนั่นคือ 5*6 นำเครื่องหมายมาด้านหลังตัวเลขจะได้เป็น 56* ให้ 56* = x จะได้ x + 7 นำเครื่องหมายไว้ด้านหลังจะได้เป็น x7 + แทนค่า x ด้วย 56* จะได้ 56*7+เป็นคำตอบ คำตอบคือ 56*7+

  18. prefix 5*6+7 infix ->postfixby Stack วิธีการจะเริ่มจากด้านซ้ายไปขวาโดยให้ความสำคัญของเครื่องหมายสูงสุดก่อน + * 6 7 5

  19. postfix 56*7+ postfix ->infix เริ่มจากด้านซ้ายไปขวา หาตัวเลขสองตัวและมีเครื่องด้านหลัง นั่นคือ 56* นำเครื่องหมายมาไว้ตรงกลางจะได้ 5*6 แทนค่า 5*6 ด้วย x จะได้ x7+ นำเครื่องหมายมาไว้ตรงกลางจะได้ x+7 แทนค่า x ด้วย 5*6 จะได้ 5*6+7 คำตอบคือ 5*6+7

  20. postfix 56*7+ postfix ->infixby Stack วิธีการจะเริ่มจากด้านซ้ายไปขวา(หน้าไปหลัง) 30 5 6 * + 7

  21. postfix 56*7+ postfix ->infixby Stack วิธีการจะเริ่มจากด้านซ้ายไปขวา(หน้าไปหลัง) 37 30 + 7

  22. prefix postfix จากตัวอย่างทั้ง prefix และ postfix จะเห็นว่าเมื่อตัวเลขที่มีจำนวนหลักมากกว่า 2 หลัก(มากกว่าหรือเท่ากับ 10)จะทำให้การแปลงกับจาก prefix(postfix) ไปเป็น infix มีความผิดพลาดเช่น 27*6+5 แปลงเป็น postfix จะได้ 276*5+ และ 2*76+5 แปลงเป็น postfix จะได้ 276*5+ จะเห็นว่า postfix ของทั้งสองค่าเหมือนกัน ดังนั้นในกรณี infix มีจำนวนใดจำนวนหนึ่งมีค่าตั้งแต่ 10 ขึ้นไป ให้ใส่เป็นเครื่องหมาย , คั่นในแต่ละเครื่องหมายและตัวเลขเช่น 27*6+5-> 27,6,*,5,+ 2*76+5 -> 2,76,*,5,+

  23. Exercise 4 แปลงค่า infix ต่อไปนี้เป็น prefix และ postfix (A + B) * C + D / (E + F * G) – H  ! (A && ! ((B < C) || (C > D))) || (C < E) A - B - C * (D + E / F - G) – H เฉลย postfix: A B + C * D E F G * + / + H - prefix: - + * + A B C / D + E * F G H  postfix: A B C < C D > || ! && ! C E < || prefix: || ! && A ! || < B C > C D < C E  postfix: A B - C D E F / + G - * - H - prefix: - - - A B * C - + D / E F G H 

  24. Exercise 5 แปลงค่า postfix ต่อไปนี้เป็น infix จากนั้นแปลงเป็น prefix A B && C || E F > ! || A B C D * - E / + F + G H / - เฉลย infix: (A && B) || C || ! (E > F) prefix: || || && A B C ! > E F  infix: A + ((B - C * D) / E ) + F - G / H   prefix: - + + A / - B * C D E F / G H 

  25. Exercise 6 Exercise 6 แปลงค่า prefix ต่อไปนี้เป็น infix จากนั้นแปลงเป็น postfix - / + * A B C D / E + F G เฉลย infix: (A * B + C) / D - E / (F + G) postfix: A B * C + D / E F G + / - 

  26. Exercise 7 แก้ปัญหา Exercise 4 5 และ 6 โดยใช้ Stack

More Related