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

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

1 Stack Bansomdej Chaopraya Rajabhat University. 2 เนื้อหา  โอเปอร์เรชั่นของสแตค  โพลิช โนเทชั่น  การแปลงสมการจาก Infix เป็น Postfix  การหาผลลัพธ์จากนิพจน์

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


งานนำเสนอเรื่อง: "1 Stack Bansomdej Chaopraya Rajabhat University. 2 เนื้อหา  โอเปอร์เรชั่นของสแตค  โพลิช โนเทชั่น  การแปลงสมการจาก Infix เป็น Postfix  การหาผลลัพธ์จากนิพจน์"— ใบสำเนางานนำเสนอ:

1 1 Stack Bansomdej Chaopraya Rajabhat University

2 2 เนื้อหา  โอเปอร์เรชั่นของสแตค  โพลิช โนเทชั่น  การแปลงสมการจาก Infix เป็น Postfix  การหาผลลัพธ์จากนิพจน์ Postfix  คิว  รีเคอร์ซีฟ  สรุป Stack Slide#2

3 3 สแตค สแตค เป็นรูปแบบหนึ่งในการจัดเรียงข้อมูล แบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูล ออกเพียงด้านใดด้านหนึ่ง มีกระบวนการ ทำงานแบบ First In Last Out : FILO ตัวอย่างที่ดีที่สุดของการจัดเรียงแบบสแตค คือ การวางซ้อนกันของจาน ซึ่งจานที่วางก่อนจะ อยู่ข้างล่าง และจานที่ถูกวางที่หลังจะอยู่ ข้างบน เวลาที่นำจานออกมาใช้ ก็จะใช้ด้าน บนสุดก่อน ดังตัวอย่าง Stack Slide#3

4 4 ตัวอย่างโครงสร้างแบบสแตค ข้อมูลที่ป้อนลงมา เป็นตัวแรก ข้อมูลที่ป้อนลงมาเป็น ตัวสุดท้าย Stack Slide#4

5 5 โอเปอร์เรชั่นของสแตค โอเปอร์เรชั่นของสแตคมี 2 โอเปอร์ เรชั่น คือ  การนำข้อมูลเข้าสู่สแตค Push  การนำข้อมูลออกจากสแตค Pop Stack Slide#5

6 6 การนำข้อมูลเข้า สู่สแตค : Push สำหรับการนำข้อมูลเข้าสู่สแตคนั้น เรียกว่าการ Push การนำข้อมูลเข้าสู่สแตค แสดงได้ดังตัวอย่างตัวไปนี้ ตัวอย่าง ต้องการนำข้อมูล ต่อไปนี้เข้าสู่ สแตคที่ว่างเปล่า กำหนดข้อมูลดังต่อไปนี้ A, B, C,D Stack Slide#6

7 7 ตัวอย่าง Max Stack Top = 0 Top = 1 Push  A Stack Slide#7

8 8 ตัวอย่าง Max Stack Top = 1 Top = 2 Push  B Stack Slide#8

9 9 ตัวอย่าง Max Stack Top = 2 Top = 3 Push  C Stack Slide#9

10 10 ตัวอย่าง Max Stack Top = 3 Top = 4 Push  D Stack Slide#10

11 โปรแกรม Push ข้อมูลลง Stack Stack Slide#11 /* pushes item on the stack */ void push ( int data ) { if ( top == MAX - 1 ) printf(”\nStack is full“); else { top++ ; stack[ top ] = data ; }

12 12 การนำข้อมูลออก จากสแตค : Pop สำหรับการนำข้อมูลออกจากสแตคนั้น เรียกว่าการ Pop การนำข้อมูลออกจากสแตค แสดงได้ดังตัวอย่างตัวไปนี้ ตัวอย่าง ต้องการนำข้อมูล A, B, C,D เข้าออกจากสแตค Stack Slide#12

13 13 ตัวอย่าง Max Stack Top = 4 Top = 3 Pop  D Stack Slide#13

14 14 ตัวอย่าง Max Stack Top = 3 Pop  C Top = 2 Stack Slide#14

15 15 ตัวอย่าง Max Stack Pop  B Top = 2 Top = 1 Stack Slide#15

16 16 ตัวอย่าง Max Stack Pop  A Top = 1 Top = 0 Stack Slide#16

17 โปรแกรม POP ข้อมูลออกจาก Stack Stack Slide#17 /* pops off the items from the stack */ int pop( ) { int data ; if ( top == -1 ) { printf("\nStack is empty“); return ( -1 ) ; } else { data = stack[ top ] ; top-- ; return ( data ) ; }

18 18 บทที่ 4 โครงสร้างข้อมูลแบบสแตก และคิว • สแตก • โอเปอร์เรชั่นของสแตก • โพลิช โนเทชั่น • การแปลงสมการจาก Infix เป็น Postfix • การหาผลลัพธ์จากนิพจน์ Postfix • คิว • สรุป

19 19 โครงสร้างข้อมูลแบบสแตก และคิว • เป็นโครงสร้างข้อมูลแบบเชิงเส้น • โดยลักษณะของโครงสร้างแบบสแตก ข้อมูลถูกจัดเข้าก่อนจะออกที่หลัง เรียกว่า “First in last out” / “FILO” • โดยลักษณะของโครงสร้างแบบคิว ข้อมูลถูกจัดเข้าก่อนจะ นำออกก่อน เรียกว่า “First in first out” / “FIFO” • โดยมีการนำโครงสร้างพื้นฐานที่เป็น อาร์เรย์ หรือ ลิงค์ลิสต์ มาใช้ในการ จัดการข้อมูล

20 20 Chapter 4 Stack and Queue 4.2 Stack Stack คือ รูปแบบในการจัดเรียงข้อมูลแบบเชิงเส้น (linear structure) ตัวอย่าง การจัดเรียงข้อมูลแบบสแตก - การจัดวางซ้อนกันของจาน / สิ่งของที่วางซ้อนกัน

21 21 Chapter 4 Stack and Queue Operations on Stack สำหรับการจัดเรียงข้อมูล การนำเข้าข้อมูลในสแตกจะ เรียกว่า พุช (Push) การนำข้อมูลออกจากสแตก เรียกว่า พอพ (Pop) ด้านของข้อมูลที่มีการนำข้อมูลเข้าออกเรียกว่า ท็อป (Top) (a) A, B, C, D, E (b) A Push: A (c) A, B, C, D, E (d) A, B, C, D Pop: E Top

22 22 Chapter 4 Stack and Queue Operations on Stack การนำข้อมูลออกจากสแตก Top (a)A, B, C, D, E (b)A, B, C, D Pop : E (c)A, B, C Pop : D (d)A, B Pop : C (e)A, B, D Push : D (f)A, B, D, E Push : E Top STACK X Top E Push : E E, D Push : D STACK Y E, D E Pop : D Pop : E

23 23 Chapter 4 Stack and Queue Operations on Stack การพิจารณาเกี่ยวกับหน่วยความจำ การพิจารณาหน่วยความจำที่ใช้และจำนวนครั้งของการ OVERFLOW ในกรณีที่จะ Push เข้าสแตก จนครบ MAXSTK - เกิด OVERFLOW บ่อย เมื่อเตรียมหน่วยความจำน้อย - จะไม่เกิด OVERFLOW เมื่อเตรียมหน่วยความจำมาก การใช้หน่วยความจำร่วมกันระหว่าง 2 สแตก MAXSTK1 + MAXSTK2 … n-3 n-2 n-1 n STACK1 STACK2 การใช้สแตกร่วม

24 24 Chapter 4 Stack and Queue Operations on Stack Program Main … begin … call sub 1 … end; Program sub 1 … begin … call sub 2 … end; Program sub2 … begin … call sub 3 … end; Program sub 3 … begin … end; Main (a)(b)(c)(d)(e)(f) Main Sub 1 Sub 2 การเก็บข้อมูลสแตกของโปรแกรม Main

25 25 Chapter 4 Stack and Queue Implementation of Stack as Static Array สแตกสามารถแสดงได้หลายวิธีโดยรูปแบบคอมพิวเตอร์ การใช้อาร์เรย์เป็นวิธีหนึ่ง โดยสแตกจะมีตัวแปรทำหน้าที่เป็น ตัวบอกจุดสูงสุดของสแตก คือ Top MAXSTK Top = 0; Top = NULL

26 26 Chapter 4 Stack and Queue Implementation of Stack as Static Array Procedure PUSH(STACK,TOP,MAXSTK,ITEM) ขบวนการนี้เป็นการนำ ITEM ใส่ใน STACK if TOP = MAXSTK, then : Print OVERFLOW and RETURN Set TOP = TOP +1 Set STACK[TOP] : = ITEM return. Procedure POP(STACK,TOP,ITEM) ขบวนการนี้เป็นการลบข้อมูล ITEM ที่ TOP ของ STACK if TOP = 0, then : Print OVERFLOW and RETURN Set ITEM : = STACK[TOP] Set TOP : = TOP - 1 return.

27 27 โพลิช โนเทชั่น (Polish Notation) โพลิช โนเทชั่น เป็นวิธีการในการ จัดรูปแบบของสมการใหม่ โดยแสดงสมการทาง คณิตศาสตร์ให้อยู่ในรูปเครื่องหมายทาง คณิตศาสตร์อยู่ก่อนตัวถูกดำเนินการ ( โพลิช โน เทชั่น เป็นชื่อที่ตั้งขึ้นมาตามชื่อของ ตำรวจเจน ลู คาวิคซ์ ผู้คิดให้เครื่องหมายอยู่หน้าตัวดำเนินการ นี้ ) ตัวอย่างของ สมการ โพลิช โนเทชั่น 2*3 แปลงเป็นสมการโพลิช โนเทชั่น เท่ากับ *23 Stack Slide#27

28 28 Chapter 4 Stack and Queue การกำหนดลำดับความสำคัญของการ ทำงานในการคำนวณคณิตศาสตร์ 2+3*5 สูงสุด : ยกกำลัง (^) สูงถัดมา : คูณ (*) หาร (/) ต่ำสุด : บวก (+) ลบ (-) ในกรณีเป็นผู้กำหนดความสำคัญโดยใช้ วงเล็บ () (2+3)*5 ตัวเลข เรียกว่า Operand

29 29 Chapter 4 Stack and Queue โพลิช โนเทชั่น เป็นวิธีการจัดรูปแบบสมการ ใหม่ การเขียนเครื่องหมาย อยู่หน้าตัวดำเนินการ เช่น 2*3 เขียนเป็น * เขียนเป็น +23 ในกรณีมีเครื่องหมายหลายตัว (5+2)*3 = (+52)*3 = *+523 (5^2)+((4*6)/3) = (^52)+((*46)/3) = (^52)+(/*463) = +^52/*463 การเขียนสมการแบบนี้ไม่ต้องใช้วงเล็บและ ลำดับความสำคัญ

30 30 ศัพท์ที่ควรทราบ Operand คือ ตัวถูกดำเนินการใดๆ เช่น A, B, C Operator คือ เครื่องหมายในการดำเนินการ เช่น +, -, *, / Infix คือสมการที่อยู่ในรูปของ Operand คั่นด้วย Operator Prefix คือสมการที่อยู่ในรูปของ Operator แล้วตามด้วย Operand Postfix คือสมการที่อยู่ในรูปของ Operand แล้วตามด้วย Operator Infix:A+B Prefix:+AB Postfix:AB+ Stack Slide#30

31 31 ลำดับความสำคัญของ เครื่องหมายทางคณิตศาสตร์ เครื่องหมาย Precedence เมื่ออยู่ที่ อินพุต Precedence เมื่อ อยู่ในสแตค ^ 43 *, /22 +, -11 (, )40 Stack Slide#31

32 32 การแปลงสมการ Infix เป็น สมการ Postfix 1. ถ้าอินพุตเป็นตัว Operand ให้นำไปไว้ที่ เอาท์พุต 2. ถ้าอินพุตเป็นตัว Operator ให้ทำดังนี้ 2.1 นำ Operator ตัวนั้นเข้าสู่สแตค ถ้าสแตคว่างเปล่าจะถือว่าเป็น opst : Operator Stack 2.2 ถ้า สแตคนั้นไม่ว่างนั่นคือมี Operator อยู่แล้วให้เปรียบเทียบ Precedence ของ Operator ที่เป็นอินพุต กับ Precedence ของ Operator ที่อยู่ในสแตค หากพบว่า Stack Slide#32

33 33 การแปลงสมการ Infix เป็น สมการ Postfix ถ้าพบว่า ค่า Operator ในอินพุตน้อย กว่าหรือเท่ากับให้ทำการ Pop Operator ใน Stack ออกมายัง Output ถ้าพบว่า ค่า Operator ในอินพุต มากกว่าให้นำ Operator นั้นบรรจุลงใน Stack ถ้าเป็นเครื่องหมาย ( ให้ push ลงสู่ Stack จนกว่าจะพบเครื่องหมาย ) หรือ stack จะว่าง ถ้าเป็นเครื่องหมาย ) ให้ Pop ข้อมูลทั้งหมดรวมทั้ง Operator ออกมาแล้ว นำไปไว้ที่เอาท์พุต Stack Slide#33

34 ตัวอย่างที่ 1 จงแปลง A+B+C ให้เป็น Postfix InputStackOutput AA ++A B+AB ++AB+ C+AB+C+ Stack Slide#34

35 ตัวอย่างที่ 2 จงแปลง A+B/C*D-E ให้เป็น Postfix InputStackOutput AA ++A B+AB /+,/AB C+,/ABC *+,*ABC/ D+,*ABC/D --ABC/D*+ E-ABC/D*+E- Stack Slide#35

36 ตัวอย่างที่ 3 A+B*C+(D*E+F)*GA+B*C+(D*E+F)*G Stack Slide#36 A A + B * C + ( D * E + F ) * G INPUTSTACKOUTPUT +A +AB +AB * +AB * C + * ABC+ ABC+ * + ( ABC+ * + ( D ABC+ * + ( D * ABC+ * + ( D * + + * E ABC+ * + ( DE * * ABC++ ( D+E* F +ABC+ * DE*F ABC+ * +DE*F+ * ABC++ * DE*F+ ABC+ * DE*F+G G +*

37 37 จงแปลงนิพจน์ Infix ต่อไปนี้ เป็น นิพจน์ Postfix [1] A + B * ( C ^ D * E / F ) – G [2] A ^ 2 – 4 * ( A * C + ( E + ( F – G ) – H ) ) [3] A ^ B * C / D * ( E ^ 3 ^ 2 ) Stack Slide#37

38 38 การหาผลลัพธ์จากนิพจน์ Postfix [1] เมื่ออ่านพบ operand ให้ push ลง stack [2] ถ้าเป็น operator ให้ pop ตัว operand ออกมา 2 ตัว เพื่อคำนวณ [3] ผลลัพธ์ที่ได้ทำการ push ลง stack Stack Slide#38

39 39 ตัวอย่างการหาผลลัพธ์ Stack Slide#39 OutputStackProcess 55 25, ,3 +7+3=10 ตัวอย่าง กำหนดให้ A=5, B=2, C=3 จง หาผลลัพธ์ ของ AB+C+

40 40 จงหาค่าของนิพจน์ Postfix ต่อไปนี้ กำหนดให้ A=5, B=3, C=2, D=1, E=2, F=3, G=1, H=2 [1] AB+CD-* [2] ABC*+DE*F+G*+ [3] ให้หาค่านิพจน์ postfix ที่ได้จาก โจทย์ในแบบฝึกหัดที่ ผ่านมา  Stack Slide#40

41 41 แบบทดสอบการประยุกต์ใช้ งานสแตค  เขียนโปรแกรมการแปลงนิพจน์ Infix เป็น Postfix Stack Slide#41

42 42 Chapter 4 Stack and Queue Arithmetic Expression Notation การกำหนดลำดับความสำคัญของการทำงานในการ คำณวนคณิตศาสตร์ 2+3*5 สูงสุด : ยกกำลัง (^) สูงถัดมา : คูณ (*) หาร (/) ต่ำสุด : บวก (+) ลบ (-) ในกรณีเป็นผู้กำหนดความสำคัญโดยใช้วงเล็บ() (2+3)*5 ตัวเลข เรียกว่า Operand

43 43 Chapter 4 Stack and Queue Arithmetic Expression Notation โพลิช โนเทชั่น เป็นวิธีการจัดรูปแบบสมการใหม่ การ เขียนเครื่องหมายอยู่หน้าตัวดำเนินการ เช่น 2*3 เขียนเป็น * เขียนเป็น +23 ในกรณีมีเครื่องหมายหลายตัว (5+2)*3 = (+52)*3 = *+523 (5^2)+((4*6)/3) = (^52)+((*46)/3) = (^52)+(/*463) = +^52/*463 การเขียนสมการแบบนี้ไม่ต้องใช้วงเล็บและลำดับความ สำคัญ


ดาวน์โหลด ppt 1 Stack Bansomdej Chaopraya Rajabhat University. 2 เนื้อหา  โอเปอร์เรชั่นของสแตค  โพลิช โนเทชั่น  การแปลงสมการจาก Infix เป็น Postfix  การหาผลลัพธ์จากนิพจน์

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


Ads by Google