ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
Stack Sanchai Yeewiyom
School of Information & Communication Technology University of Phayao
2
Nature of Stack A stack has the property that the last placed on the stack will be the first item removed. (Last In First Out: LIFO)
3
Implementation of Stack
Array-based implementation Pointer-based implementation
4
Array-based implementation
Push Pop
5
Array-based implementation
POP PUSH 4 E top 3 D 2 C 1 B A
6
Exp. Push void push (stackitemtype newitem , boolean& success) {
success = boolean (top < max-1) if (success) top ++ ; item [ top] = newitem ; }
7
Exp. Pop void pop (boolean& success) {
success = boolean (! stackisempty ()) ; if (success) stacktop = item [top] top -- ; }
8
Pointer-based implementation
temp 20 topptr newtopptr 10 topptr newtopptr
9
Push newtopptr -> next = topptr; topptr = newtopptr;
10
Pop topptr = temp -> next; temp -> next = null; delete temp;
11
Exp. Push
12
Exp. Pop
13
การคำนวณนิพจน์ทางคณิตศาสตร์ แบ่งเป็น 3 ประเภทคือ
นิพจน์ Infix คือ นิพจน์ที่มีเครื่องหมายดำเนินการ (operator) อยู่กึ่งกลางตัวถูกดำเนินการ (operand) เช่น A + B นิพจน์ Postfix คือ นิพจน์ที่มีเครื่องหมายดำเนิน (operator) การอยู่ด้านหลังตัวถูกดำเนินการ (operand) เช่น AB+ นิพจน์ Prefix คือ นิพจน์ที่มีเครื่องหมายดำเนินการ (operator) อยู่ด้านหน้าตัวถูกดำเนินการ (operand) เช่น -AB
14
การคำนวณนิพจน์ทางคณิตศาสตร์
เครื่องหมายดำเนินการ (operand) ได้แก่เครื่องหมาย * / ^ ตัวถูกดำเนินการ ได้แก่ สัญลักษณ์แทนค่าตัวเลข เช่น A B C D หรือตัวแปรอื่น สำหรับในระบบคอมพิวเตอร์ไม่สามารถที่จะคำนวณในรูปแบบของนิพจน์ infix ได้ จะต้องแปลงเป็นรูปแบบของนิพจน์postfix เสียก่อน โดยลักษณะของการแปลงนิพจน์จะใช้การเปรียบเทียบความสำคัญของตัวดำเนินการ
15
การคำนวณนิพจน์ทางคณิตศาสตร์
ลำดับความสำคัญของตัวดำเนินการ 1. เครื่องหมาย ( 2. เครื่องหมาย ^ 3. เครื่องหมาย * / 4. เครื่องหมาย เครื่องหมาย )
16
การประยุกต์ Stack ในการคำนวณนิพจน์พีชคณิต (Algebraic Expression)
จงเปลี่ยนจาก infix ให้เป็น postfix A+B*C-(E-F)/G*H ให้ A=3, B=2, C=3, E=5, F=2, G=1, H=2
17
การประยุกต์ Stack ในการคำนวณนิพจน์พีชคณิต (Algebraic Expression)
Result ABC*+EF-G/H*-
18
การประยุกต์ Stack ในการคำนวณนิพจน์พีชคณิต (Algebraic Expression)
หลักการเปลี่ยนจาก infix ให้เป็น postfix 1. ถ้าตัวที่อ่านเข้ามาเป็น operand ให้นำไปเป็น output 2. ถ้าตัวที่อ่านเข้ามาเป็น ( ให้ทำการ Push 3. ถ้าตัวที่อ่านเข้ามาเป็น ) ให้ทำการ Pop จาก Stack ไปเป็นผลลัพธ์ Pop จนกว่าจะถึง (
19
การประยุกต์ Stack ในการคำนวณนิพจน์พีชคณิต (Algebraic Expression)
4. ถ้าตัวที่อ่านเข้ามาเป็น operator ให้ตรวจสอบว่า ถ้า stack ว่าง ให้ทำการ Push ถ้า stack ไม่ว่าง ให้เปรียบเทียบ operator ที่เข้ามากับ operator ที่ top of stack ถ้ามี precedence (priority) น้อยกว่าหรือเท่ากับให้ Pop แล้วจึงทำการเปรียบเทียบกับ top of stack ตัวใหม่ทำไปเรื่อยๆ จะหยุดก็ต่อเมื่อเจอ ( หรือมี precedence น้อยกว่า จึงทำการ Push
20
การประยุกต์ Stack ในการคำนวณนิพจน์พีชคณิต (Algebraic Expression)
5. ถ้าข้อมูลหมด ให้ Pop stack ไปเป็นผลลัพธ์
21
ตัวอย่างการแปลงนิพจน์ infix เป็น postfix
นิพจน์ A+B*C-D ข้อมูลเข้า operator stack นิพจน์ postfix A A + + B AB * +* AB C +* ABC ABC*+ D ABC*+D ABC*+D-
22
ตัวอย่างการแปลงนิพจน์ infix เป็น postfix
นิพจน์ (A+B)*C-D ข้อมูลเข้า operator stack นิพจน์ postfix ( ( A ( A + (+ A B (+ AB ) AB+ * * AB+ C * AB+C AB+C* D AB+C*D AB+C*D-
23
การหาค่าผลลัพธ์จากนิพจน์ postfix (Propostfix)
การคำนวณโดยใช้ stack ช่วย และแสดงให้เห็นความถูกต้องของนิพจน์ postfix ที่ถูกแปลงจากนิพจน์ infix ด้วย
24
การหา Propostfix 1. ถ้าข้อมูลเข้าเป็น operand ให้ push ลงสแตก
2. ถ้าข้อมูลเข้าเป็น operator ให้ pop stack 2 ครั้ง โดยให้ - operand ที่ pop นั้นเป็น operand ตัวที่ 2 และ 1 ตามลำดับ - นำ operand ทั้งสองคำนวณผลลัพธ์ตาม operator ที่เป็น ข้อมูลเข้า แล้วนำผลการคำนวณ push ลง stack
25
ตัวอย่างการหา Propostfix
ตัวอย่าง การประมวลผล ABC*+D- ข้อมูลเข้า op op2 คำนวณ stack A A B A, B C A, B, C * B C B*C A,B*C + A B*C A+B*C A+B*C D A+B*C, D A+B*C D A+B*C-D A+B*C-D
26
** ถ้าผลลัพธ์ที่ได้ออกมาเท่ากัน แสดงว่า Propostfix ที่หาได้ถูกต้อง
ตรวจสอบความถูกต้อง กำหนดค่าให้กับแต่ละ Operand เพื่อตรวจสอบค่าที่ได้จากนิพจน์ Infix และค่าที่ได้จาก Propostfix ตัวอย่าง จากนิพจน์ Infix A+B*C-D กำหนดให้ A=2, B=3, C=1, D=1หาค่าออกมาได้เท่ากับ …… เมื่อหาแปลงจาก Infix เป็น Postfix และนำ Postfix ไปหา Propostfix จากตัวอย่างที่ผ่านมา โดยแทนค่า Operand ลงไป จะได้ดังนี้ ** ถ้าผลลัพธ์ที่ได้ออกมาเท่ากัน แสดงว่า Propostfix ที่หาได้ถูกต้อง
27
ตัวอย่างการหา Propostfix
ตัวอย่าง การประมวลผล ABC*+D- ข้อมูลเข้า op op2 คำนวณ สแตก A A B A, B C A, B, C * B C 3*1 A,3 + A D , D D
28
Homework จงเปลี่ยน infix ให้เป็น postfix A+B/(C+D)*E
29
การประยุกต์ Stack ในการคำนวณนิพจน์พีชคณิต (Algebraic Expression)
Exp. จงหาผลลัพธ์ของ Postfix 5 3 2 * + 4 – 5 +
30
การประยุกต์ Stack ในการเลือกเส้นทางการบิน
Z Exp. จงหาเส้นทางจาก P ไปยัง Z Y W S P T R X Q
31
การประยุกต์ Stack ในการเลือกเส้นทางการบิน
32
Recursive Solution เป็นฟังก์ชันที่มีการเรียกใช้ตัวเองซ้ำๆ วนไปเรื่อยๆ จนกว่าจะถึงเงื่อนไขที่กำหนด เช่น Factorial function Factorial function (n!) คือผลคูณของเลขจำนวนเต็มบวก ตั้งแต่ 1 ถึง n นิยาม n! = if n=0 n(n-1)! if n>0.
33
Factorial function Exp. 4!=? 4! = 4x3! = 4x(3x2!) = 4x(3x(2x1!))
= 24
34
Factorial function เขียนแบบวนรอบ (Iterative)
long int Factorial (int n) { int i; long int prod = 1; for (i=2; i<=n; i++) prod = prod * i; return (prod); }
35
Factorial function เขียนแบบ Recursive long int Factorial (int n)
{ if (n==0) return 1; else return (n*Factorial (n-1)); }
36
Factorial function (Stack)
Exp. Calculate 4! 1! 1 * Fac (0) 2 * Fac (1) 3 * Fac (2) 4 * Fac (3) 2! 3! 4!
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.