ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
Stack Holidays/seasonal content
2
Stack คุณลักษณะของสแตก
การนำข้อมูลเข้าและออกจากสแตกจะกระทำที่ปลายข้างเดียวเท่านั้น การทำงานของสแตกจะมีลักษณะแบบ เข้าหลัง ออกก่อน (LIFO: Last In, First Out) ตัวอย่างการทำงานแบบ LIFO เช่น การวางจานซ้อนกัน
3
Stack ประโยชน์ของสแตก เพื่อแปลงนิพจน์ทางคณิตศาสตร์
การจัดลำดับการทำงานแบบ recursive หรือการเรียกใช้ฟังก์ชัน เป็นกลไกสำคัญในการทำงานของ compiler เช่น การตรวจสอบเครื่องหมาย { } ในภาษาซี หรือการตรวจสอบเครื่องหมายวงเล็บ
4
Stack การสร้างสแตก สามารถใช้อาเรย์ หรือ Linked List แทนได้
มีตัวชี้ 1 ตัวสำหรับชี้ที่สมาชิกตัวบนสุดของสแตก สมมติให้เป็น TOP กรณีสแตกว่าง กำหนดให้ค่า TOP = 0 กรณี TOP=N เมื่อ N คือขนาดของสแตก แสดงว่าสแตกเต็ม Empty stack Full stack TOP=N A A A D C B A TOP=0
5
Stack Operation ของสแตก การเพิ่มข้อมูลลงในสแตก (PUSH)
การดึงข้อมูลออกจากสแตก (POP)
6
Stack การเพิ่มข้อมูลลงในสแตก (PUSH)
ในการ PUSH ข้อมูลต้องตรวจสอบก่อนว่าสแตกเต็มหรือไม่ โดยใช้เงื่อนไข TOP = N หรือไม่ เมื่อ N คือขนาดของสแตก หาก TOP = N แสดงว่าสแตกเต็ม หากสแตกเต็มจะไม่สามารถนำข้อมูลเข้าไปในสแตกได้อีก
7
Stack PUSH ALGORITHM Push(stack,max,top,item) if(max=top) write “Full Stack” else top ← top + 1 stack[top] = item หมายเหตุ: stack คือ ชื่ออาเรย์ที่ใช้เก็บข้อมูลในสแตก max คือ ขนาดของสแตก top ใช้เก็บตำแหน่งบนสุดของสแตก Item แทนข้อมูลที่ต้องการ push ลงในสแตก
8
Stack ตัวอย่าง PUSH Empty stack Push(A) Push(B) Push(C) Push(D)
TOP=0 Push(A) A TOP=1 Push(B) B TOP=2 A Push(C) B TOP=3 A C Push(D) B TOP=4 A C D Push(E) B TOP=4 A C D Error:Full Stack
9
Stack การดึงข้อมูลออกจากสแตก (POP)
ในการ POP ข้อมูลต้องตรวจสอบก่อนว่ามีข้อมูลอยู่ในสแตกหรือไม่ โดยใช้เงื่อนไข TOP = 0 หาก TOP = 0 แสดงว่าสแตกว่างเปล่า หากสแตกว่างเปล่าจะไม่สามารถดึงข้อมูลออกจากสแตกได้
10
Stack POP ALGORITHM Pop(top) if(top=0) write “Empty Stack” else top ← top - 1 หมายเหตุ: top ใช้เก็บตำแหน่งบนสุดของสแตก
11
Stack ตัวอย่าง POP Pop Pop Pop Pop Pop Pop Error: Empty Stack B A C D
TOP=4 A C D Pop B TOP=3 A C B Pop TOP=2 A A Pop TOP=1 Pop TOP=0 Pop TOP=0 Error: Empty Stack
12
การใช้ สแตก เพื่อแปลงเลขฐานสิบเป็นเลขฐานสอง
Algorithm 1. loop (number > 0) 1.1 b = number modulo 2 1.2 push (stack,b) 1.3 number = number / 2 2. loop (not empty(stack)) 2.1 pop(stack) 1 1 1 ตัวอย่าง: > 1011 pop stack 1 top top stack 1 top stack 1 top stack 1
13
Parenthesis matching ตัวอย่าง: ((A + B) / C) Algorithm
1. loop (more data) 1.1 If character is ‘(‘ 1.1.1 push(stack, character) 1.2 else if character is ‘)’ 1.2.1 if empty (stack) then error 1.2.2 else pop(stack) 2. if not empty(stack) 2.1 error ตัวอย่าง: ((A + B) / C) stack ( top push(‘(’) stack ( top push(‘(’) stack ( top pop stack top pop
14
Parenthesis matching ตัวอย่าง: (A + B) + C) error Algorithm
1. loop (more data) 1.1 If character is ‘(‘ 1.1.1 push(stack, character) 1.2 else if character is ‘)’ 1.2.1 if empty (stack) then error 1.2.2 else pop(stack) 2. if not empty(stack) 2.1 error stack empty stack error ตัวอย่าง: (A + B) + C) stack ( top push(‘(’) pop stack top
15
การใช้ สแตก เพื่อแปลงนิพจน์ทางคณิตศาสตร์
รูปแบบนิพจน์ทางคณิตศาสตร์ Infix : A + B * C - D / E Postfix : A B C * + D E / - Operators priority priority 3 : + - priority 2 : * / priority 1 : ^ priority 0 : ( น้อย มาก
16
Infix to Postfix Transformation
Algorithm infix2postfix 1. CreateStack (s) 2. Loop (for each character in infix) 2.1 if (character = ‘(‘) 2.1.1 pushStack (s, character) 2.2 elseif (character = ‘)’) 2.2.1 popStack (s, character) 2.2.2 loop (character ≠ ‘(‘) 1. print character 2. popStack (s, character)
17
Infix to Postfix Transformation
Algorithm infix2postfix (cont.) 2.3 elseif (character = ‘*’, ‘/’, ‘+’, ‘-’, ‘^’) 2.3.1 stackTop (s, toptoken) 2.3.2 loop (not emptyStack (s) and priority(character) <= priority(toptoken)) 1. popStack (s, tokenout) 2. print tokenout 3. stackTop (s, toptoken) 2.3.3 pushStack (s, character) 2.4 else 2.4.1 print character
18
Infix to Postfix Transformation
Algorithm infix2postfix (cont.) 3. Loop (not emptyStack (s)) 3.1 popStack (s, character) 3.2 print character 4. end
19
Infix to Postfix Transformation
Infix : A + B * C Postfix : A B C * + A B C * +
20
Infix to Postfix Transformation
Infix : A + B * C - D / E Postfix : A B C * + D E / - - D E / A B C + * * / + -
21
Algorithm Postfix Evaluation
1. createStack (s) 2. Loop (for each character) 2.1 if character is operand 2.1.1 pushStack (s, character) 2.2 else 2.2.1 popStack (s, oper2) 2.2.2 popStack (s, oper1) 2.2.3 operator character 2.2.4 value calculate (oper1, operator, oper2) 2.2.5 pushStack (s, value) 3. popStack (s, result) 4. end
22
Postfix Evaluation A B C + * * + 10 20 * 6 4 2
23
Exercise Convert Infix to Postfix 1. A+B*C-D+E 2. (A+B)*C-(D+E)
3. A*(B-C)/D+E*F 4. 3*(1+7)/2
24
จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.