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

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

Bansomdej Chaopraya Rajabhat University

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


งานนำเสนอเรื่อง: "Bansomdej Chaopraya Rajabhat University"— ใบสำเนางานนำเสนอ:

1 Bansomdej Chaopraya Rajabhat University
Stack Bansomdej Chaopraya Rajabhat University

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

17 โปรแกรม POP ข้อมูลออกจาก Stack
/* 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 ) ; Stack Slide#17

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

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

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

21 Chapter 4 Stack and Queue
4.2.1 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 Top

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

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

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

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

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

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

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

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 ลำดับความสำคัญของเครื่องหมายทางคณิตศาสตร์
Precedence เมื่ออยู่ที่ อินพุต Precedence เมื่ออยู่ในสแตค ^ 4 3 *, / 2 +, - 1 ( , ) Stack Slide#31

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

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

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

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

36 ตัวอย่างที่ 3 A + B * C + ( D * E + F ) * G INPUT STACK OUTPUT A A + B
Stack Slide#36

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

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

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

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

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


ดาวน์โหลด ppt Bansomdej Chaopraya Rajabhat University

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


Ads by Google