ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
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
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.