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

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

โครงสร้างข้อมูลแบบ สแตก (stack)

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


งานนำเสนอเรื่อง: "โครงสร้างข้อมูลแบบ สแตก (stack)"— ใบสำเนางานนำเสนอ:

1 โครงสร้างข้อมูลแบบ สแตก (stack)
อาจารย์กัญณัฎฐ์ สุริยันต์ สาขาวิชาคอมพิวเตอร์ธุรกิจ คณะบริหารธุรกิจ วิทยาลัยเทคโนโลยีสยาม Phone

2 วัตถุประสงค์การเรียนรู้
เพื่อให้นักศึกษาทราบถึงลักษณะโครงสร้างข้อมูลแบบ สแตก (stack) เพื่อให้นักศึกษาส่วนประกอบของ stack เพื่อให้นักศึกษาทราบถึงการประยุกต์ให้โครงสร้างข้อมูลแบบสแตก(stack)

3 ความหมายของสแตก (Stack)
วุฒิพงษ์ เขื่อนดิน (2553 : 61) สแตก (Stack) หมายถึง โครงสร้างข้อมูลที่ออกแบบมาให้มีลักษณะทั้งแบบเป็นเชิงเส้น (Linear Structure) และแบบไม่เป็นเชิงเส้น (Non Liear Structure) เพราะเขียนโปรแกรมได้ทั้งการใช้อาร์เรย์ (Array) และพอยเตอร์ (Pointer) การนำข้อมูลเข้าและออกจากสแตกจะมีลำดับการทำงานแบบเข้าหลังออกก่อน (LIFO)

4 รูปจำลองแสดงการทำงานของสแตก
ทางเข้า ทางออก ข้อมูล 3 3 ตำแหน่ง บนสุด ของสแตก ข้อมูล 2 2 ข้อมูล 1 1

5 การดำเนินการกับสแตก มี 2 แบบ
Push Stack คือ การนำข้อมูลไปเก็บไว้ ในสแตก Pop Stack คือ การนำข้อมูลออกจากสแตก

6 ตัวอ้างอิง Top Stack จะใช้ตัวอ้างอิง(Index) ชื่อ Top มาเป็นดัชนี สำหรับบ่งบอกถึงจำนวนของสมาชิกในสแตก

7 ตัวอย่างการ Push ข้อมูลลง Stack

8 ตัวอย่าง ลำดับการ Push Stack
5 4 3 2 1 Top

9 ตัวอย่าง ลำดับการ Push Stack
Top = Top+1; stack[Top] = data; 1 Push = S S 5 4 3 2 1 Top Complete

10 ตัวอย่าง ลำดับการ Push Stack
Top = Top+1; stack[Top] = data; 2 Push = t t S 5 4 3 2 1 Top Complete

11 ตัวอย่าง ลำดับการ Push Stack
3 Push = a a t S 5 4 3 2 1 Top Complete

12 ตัวอย่าง ลำดับการ Push Stack
4 Push = c c a t S 5 4 3 2 1 Top Complete

13 ตัวอย่าง ลำดับการ Push Stack
5 Push = k k c a t S 5 4 3 2 1 Top Complete

14 ตัวอย่าง ลำดับการ Push Stack
6 Push = i k c a t S 5 4 3 2 1 Top Overflow

15 ตัวอย่างการ Pop ข้อมูลออกจากstack

16 ตัวอย่าง ลำดับการ Pop Stack
5 4 3 2 1 Top

17 ตัวอย่าง ลำดับการ Pop Stack
Top = Top -1; Data = Stack[Top]; 1 Pop c a t S 5 4 3 2 1 Top k Complete

18 ตัวอย่าง ลำดับการ Pop Stack
2 Pop a t S 5 4 3 2 1 Top c Complete

19 ตัวอย่าง ลำดับการ Pop Stack
3 Pop t S 5 4 3 2 1 Top a Complete

20 ตัวอย่าง ลำดับการ Pop Stack
4 Pop S 5 4 3 2 1 Top t Complete

21 ตัวอย่าง ลำดับการ Pop Stack
5 Pop 5 4 3 2 1 Top S Complete

22 ตัวอย่าง ลำดับการ Pop Stack
6 Pop 5 4 3 2 1 Top Empty

23 ลองเขียนแผนภาพ การ Push และการ Pop ข้อมูลออกจากสแตกพร้อมทั้งระบุ ตำแหน่ง ดัชนี Top ของ stack 5 ชั้น
Push (A) Push (B ) Pop (B) Push (F) Push (R) Pop (R) Pop (F) Push (D) Push (V) Pop (V) 5 4 3 2 1

24 แบบฝึกหัด จงวาดภาพจำลองการเปลี่ยนแปลงการทำงานใน Stack ขนาด 5 พร้อมบอกตำแหน่งของ Top ในแต่ละขั้นตอน ให้ครบ Push (10) Push (11 ) Pop (11) Push (12) Push (14) Pop (14) Pop (12) Push (20) Push (16) Pop (16) 5 4 3 2 1

25 1.การแปลงนิพจน์ Infix เป็น Postfix 2. การหาผลลัพธ์จากนิพจน์ Postfix
การประยุกต์ใช้ stack มี 2 แบบ 1.การแปลงนิพจน์ Infix เป็น Postfix 2. การหาผลลัพธ์จากนิพจน์ Postfix

26 1การแปลงนิพจน์ Infix เป็น Postfix
เป็นกระบวนการที่มีความสำคัญต่อการออกแบบโปรแกรม นิพจน์ที่เขียนเข้าไปปกติ จะเรียกว่า นิพจน์ infix ลักษณะคือ A+B เมื่อทำการแปลงเป็น นิพจน์แบบ Postfix จะได้ AB+

27 คำศัพท์ที่ควรทราบ ในการใช้งานstack นั้น
เครื่องหมายทางคณิตศาสตร์เรียกว่า operator ตัวแปร หรือ ค่าคงที่ เรียกว่า operand

28 การแปลงนิพจน์จาก infix เป็น Postfix
ต้องอาศัยหรือใช้กลไกของสแตกเข้ามาช่วยในการแปลง ต้องคำนึงถึงนิยามความสำคัญของลำดับก่อนหลังของOperator

29 อัลกอริทึม การแปลงนิพจน์ Infix เป็น Postfix
อัลกอริทึมในการแปลงนิพจน์ Infix เป็น postfix โดยการใช้ stack - นิพจน์ Infix ที่กำหนดให้ถือว่าเป็นInput ให้อ่านค่ามาละตัวจากซ้ายไปขวา (X+Y) * Z นิพจน์ Infix

30 1. ถ้า Input เป็น ตัวถูกดำเนินการ(Operand) ได้แก่ ตัวแปร ค่าคงที่ (A, B,1,2,3) ให้นำออกไปเป็น Output
2. ถ้า Input เป็นตัวดำเนินการ (Operator) (-,+,^,*,/) แบ่งเป็นกรณีต่างๆดังนี้ 2.1 ถ้า Stack ว่าง ให้ Push ตัวดำเนินการ ลงใน Stack 2.2 ถ้า Stack ไม่ว่าง ให้เปรียบเทียบตัวดำเนินการ (Operator) ที่เป็น Input กับตัวดำเนินการที่เป็นตำแหน่ง Top 2.2.1 ถ้าตัวดำเนินการที่เป็น Input มีลำดับความสำคัญมากกว่า ให้ push ลงใน stack 2.2.2 ถ้าตัวดำเนินการที่เป็น Input มีลำดับความสำคัญน้อยกว่าหรือ เท่ากัน ให้ pop ตัวดำเนินการที่ตำแหน่ง Top ออกไปเป็น Output แล้วนำ ตัวดำเนินการที่Input ตัวเดิม ทำการเปรียบเทียบกับ ตัวดำเนินการในตำแหน่ง Top ต่อไปเรื่อยๆ **ให้ถือว่าเครื่องหมายวงเล็บเปิด (ใน stack มีลำดับความสำคัญน้อยกว่าตัวดำเนินการอื่นๆ

31 3. ถ้า Input เป็นเครื่องหมายวงเล็บเปิด ( ให้ push ลงใน stack
4. ถ้า Input เป็นเครื่องหมายวงเล็บปิด ) ให้ pop ตัวดำเนินการออกจาก stack ออกไปเป็น Output ทีละตัวจนกระทั่งเจอเครื่องหมายวงเล็บ ( จากนั้น เมื่อเจอให้ทิ้งเครื่องหมายวงเล็บทั้งคู่ไป 5. ถ้า Input หมดแล้ว ให้ pop ตัวดำเนินการออกจาก stack ออกไปเป็น Output ทีละตัวจน Stack ว่าง

32 ตัวดำเนินการ (Operator)
นิพจน์ (X+Y) * Z ตัวอย่าง Input นิพจน์ Infix Stack ตัวดำเนินการ (Operator) Output นิพจน์ PostFix ( X + ( + Y X Y ) XY + * Z XY +Z XY +Z* 3 1 2.2.1 1 4 2.1 1 5

33 จงแปลงนิพจน์ต่อไปนี้ จาก infix เป็น postfix
นิพจน์ A*(B+C)/D

34 นิพจน์ A*(B+C)/D A * ( * ( B AB + * (+ C ABC ) ABC+ / ABC+* D ABC+*D
Input นิพจน์ Infix Stack ตัวดำเนินการ (Operator) Output นิพจน์ PostFix A * ( * ( B AB + * (+ C ABC ) ABC+ / ABC+* D ABC+*D ABC+*D/ 1 2.1 3 1 2.2.1 1 4 2.2.2 1 5

35 แบบฝึกหัด จงแปลงนิพจน์ Infix ต่อไปนี้เป็น นิพจน์ Postfix A-B*C A*(B+C)
A+B*(C^D*E/F)-G A+(B*C-(D/F-E)*G)*H

36 2. การหาผลลัพธ์ค่านิพจน์postfix มีอัลกอริทึม ดังต่อไปนี้
กรณีเป็นตัวถูกดำเนินการ (Operand) ให้pushไว้ในstack (หากมีหลายค่าก็ให้เก็บค่านั้นไปเรื่อยๆ ) หากพบตัวดำเนินการ(Operator) ให้popตัวถูกดำเนินการ(Operand) ที่เก็บค่าไว้ล่าสุด 2 ค่า มาคำนวณหาคำตอบแล้วนำค่าคำตอบนั้นเก็บกลับเข้าไปไว้ใน stack

37 เมื่อพิจารณาขั้นตอนดังกล่าว พบว่า มีลักษณะของการใช้โครงสร้างแบบ LIFO (เข้าหลัง-ออกก่อน ) ซึ่งเป็น ลักษณะโครงสร้างข้อมูลแบบสแตก ดังนั้น ด้วยเหตุนี้ คอมพิวเตอร์จึงนำโครงสร้างข้อมูลแบบสแตก มาช่วยในการคำนวณหาผลลัพธ์จากนิพจน์ Postfix

38 ตัวอย่าง นิพจน์ Infix (4+6)*(9-(5-2)) ต้องแปลงค่าเป็น นิพจน์ Postfix ก่อน

39 ( 4 + (+ 6 4 6 ) 4 6 + * *( 9 4 6 +9 - *(- 4 6 + 9 Input นิพจน์ Infix
Stack ตัวดำเนินการ (Operator) Output นิพจน์ PostFix ( 4 + (+ 6 4 6 ) 4 6 + * *( 9 - *(- 3 4 2.1

40 ต่อ ( *(-( 46+9 5 46+95 - *(-(- 2 46+952 ) *(- 46+952- *( 46+952- - *
Input นิพจน์ Infix Stack ตัวดำเนินการ (Operator) Output นิพจน์ PostFix ( *(-( 46+9 5 46+95 - *(-(- 2 46+952 ) *(- *( * * *

41 จากโจทย์เมื่อแปลงค่า นิพจน์ Infix เป็น Postfix

42 คำนวณหาค่า จากนิพจน์ Postfix ที่ได้ ดังนี้
stack คำอธิบาย 4 Push 4 เข้าstack 6 46 Push 6 เข้าstack + 10 Pop 4 และ 6 หาค่าผลลัพธ์ 4+6 = 10 Push ผลลัพธ์เข้าstack 9 10 9 Push 9 เข้าstack 5 10 9 5 Push 5 เข้าstack

43 ต่อ ค่า ของpostfix stack คำอธิบาย 2 10 9 5 2 Push 2 เข้าstack - 10 9 3
Pop 5 และ 2 หาผลลัพธ์ 5-2 = 3 Push ผลลัพธ์เข้า stack 10 6 Pop 9 และ 3 หาผลลัพธ์ 9-3=6 * 60 Pop 10 และ 6 หาผลลัพธ์ 10* 6=60

44 จงหาผลลัพธ์นิพจน์postfixต่อไปนี้
* 2/ /4 + / 4 * + / * 3* 1 2 3 * * + 12 / * * * 3 /

45 จงแปลงนิพจน์ infix เป็น Postfix จากนั้นหาผลลัพธ์ ของนิพจน์ Postfix
((2+4*2/8)*5-6)/7 2*3+5*2/2-16/4


ดาวน์โหลด ppt โครงสร้างข้อมูลแบบ สแตก (stack)

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


Ads by Google