1 / 43

Stack

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

ronna
Download Presentation

Stack

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. 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 สำหรับการนำข้อมูลเข้าสู่สแตคนั้นเรียกว่าการ 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 สำหรับการนำข้อมูลออกจากสแตคนั้นเรียกว่าการ 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. สแตก • โอเปอร์เรชั่นของสแตก • โพลิช โนเทชั่น • การแปลงสมการจาก Infix เป็น Postfix • การหาผลลัพธ์จากนิพจน์ Postfix • คิว • สรุป บทที่ 4 โครงสร้างข้อมูลแบบสแตก และคิว

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

  20. Chapter 4 Stack and Queue 4.2 Stack Stackคือ รูปแบบในการจัดเรียงข้อมูลแบบเชิงเส้น (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, CPop : 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 1 23 4 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 … begin … call sub 2 … end; Program sub2 … begin … call sub 3 … end; Program sub 3 … begin … end; 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. ลำดับความสำคัญของเครื่องหมายทางคณิตศาสตร์ลำดับความสำคัญของเครื่องหมายทางคณิตศาสตร์ 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 ในอินพุตน้อยกว่าหรือเท่ากับให้ทำการ PopOperatorใน Stack ออกมายัง Output 2.2.2 ถ้าพบว่า ค่าOperator ในอินพุตมากกว่าให้นำ Operatorนั้นบรรจุลงใน Stack 2.2.3 ถ้าเป็นเครื่องหมาย ( ให้ push ลงสู่ Stack จนกว่าจะพบเครื่องหมาย ) หรือ stack จะว่าง 2.2.4 ถ้าเป็นเครื่องหมาย ) ให้ Pop ข้อมูลทั้งหมดรวมทั้ง Operator ออกมาแล้วนำไปไว้ที่เอาท์พุต Stack Slide#33

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

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

  36. + A + A B + A B * A B C + A B C + * ( + A B C + * ( + A B C + D * ( + A B C + D * * ( + A B C + D E * ( + + A B C + D E * * + A B C + D E * F * + A B C + D E * F + * + A B C + D E * F + * * A B C + D E * F + G * A + B * C + ( D * E + F ) * G ตัวอย่างที่ 3 INPUT STACK OUTPUT A + A B A + B * C + ( D * E + F ) * G * C + + * ( D * E + * F + * G * + 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+ 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 การเขียนสมการแบบนี้ไม่ต้องใช้วงเล็บและลำดับความ สำคัญ

More Related