งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

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

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "Chapter 3 - Stack, - Queue,- Infix Prefix Postfix"— ใบสำเนางานนำเสนอ:

1 Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
WATTANAPONG SUTTAPAK 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 จะต้องได้

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 จะต้องได้

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) จะต้องได้

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-* หรือ *

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

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 -> infix by Stack วิธีการจะเริ่มจากด้านขวาไปซ้าย(หลังไปหน้า) + * 5 6 7

16 prefix +*567 prefix -> infix by stack วิธีการจะเริ่มจากด้านขวาไปซ้าย(หลังไปหน้า) + 30 37 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 -> postfix by Stack วิธีการจะเริ่มจากด้านซ้ายไปขวาโดยให้ความสำคัญของเครื่องหมายสูงสุดก่อน 5 * 6 + 7

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 -> infix by Stack วิธีการจะเริ่มจากด้านซ้ายไปขวา(หน้าไปหลัง) 5 6 30 * 7 +

21 postfix 56*7+ postfix -> infix by 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


ดาวน์โหลด ppt Chapter 3 - Stack, - Queue,- Infix Prefix Postfix

งานนำเสนอที่คล้ายกัน


Ads by Google