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

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

Stack. คุณลักษณะของสแตก o การนำข้อมูลเข้าและออกจากสแตกจะ กระทำที่ปลายข้างเดียวเท่านั้น o การทำงานของสแตกจะมีลักษณะแบบ เข้า หลัง ออกก่อน (LIFO: Last In,

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


งานนำเสนอเรื่อง: "Stack. คุณลักษณะของสแตก o การนำข้อมูลเข้าและออกจากสแตกจะ กระทำที่ปลายข้างเดียวเท่านั้น o การทำงานของสแตกจะมีลักษณะแบบ เข้า หลัง ออกก่อน (LIFO: Last In,"— ใบสำเนางานนำเสนอ:

1 Stack

2 คุณลักษณะของสแตก o การนำข้อมูลเข้าและออกจากสแตกจะ กระทำที่ปลายข้างเดียวเท่านั้น o การทำงานของสแตกจะมีลักษณะแบบ เข้า หลัง ออกก่อน (LIFO: Last In, First Out) o ตัวอย่างการทำงานแบบ LIFO เช่น การวาง จานซ้อนกัน

3 Stack ประโยชน์ของสแตก o เพื่อแปลงนิพจน์ทางคณิตศาสตร์ o การจัดลำดับการทำงานแบบ recursive หรือการเรียกใช้ฟังก์ชัน o เป็นกลไกสำคัญในการทำงานของ compiler เช่น การตรวจสอบเครื่องหมาย { } ในภาษาซี หรือการตรวจสอบ เครื่องหมายวงเล็บ

4 Stack การสร้างสแตก o สามารถใช้อาเรย์ หรือ Linked List แทนได้ o มีตัวชี้ 1 ตัวสำหรับชี้ที่สมาชิกตัวบนสุด ของสแตก สมมติให้เป็น TOP o กรณีสแตกว่าง กำหนดให้ค่า TOP = 0 o กรณี TOP=N เมื่อ N คือขนาดของสแตก แสดงว่าสแตกเต็ม Empty stack TOP=0 Full stack TOP=N A B C D A A A

5 Stack Operation ของสแตก o การเพิ่มข้อมูลลงในสแตก (PUSH) o การดึงข้อมูลออกจากสแตก (POP)

6 Stack การเพิ่มข้อมูลลงในสแตก (PUSH) o ในการ PUSH ข้อมูลต้องตรวจสอบก่อนว่าส แตกเต็มหรือไม่ โดยใช้เงื่อนไข TOP = N หรือไม่ เมื่อ N คือขนาดของสแตก o หาก TOP = N แสดงว่าสแตกเต็ม o หากสแตกเต็มจะไม่สามารถนำข้อมูลเข้าไป ในสแตกได้อีก

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 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) o ในการ POP ข้อมูลต้องตรวจสอบก่อนว่ามี ข้อมูลอยู่ในสแตกหรือไม่ โดยใช้เงื่อนไข TOP = 0 o หาก TOP = 0 แสดงว่าสแตกว่างเปล่า o หากสแตกว่างเปล่าจะไม่สามารถดึงข้อมูล ออกจากสแตกได้

10 Stack POP ALGORITHM Pop(top) if(top=0) write “Empty Stack” else top ← top - 1 หมายเหตุ : top ใช้เก็บตำแหน่งบนสุด ของสแตก

11 Stack ตัวอย่าง POP Pop TOP=0 A Pop TOP=1 B Pop TOP=2 A Pop B TOP=3 A C Pop B TOP=4 A C D Error: Empty Stack Pop TOP=0

12 การใช้ สแตก เพื่อแปลง เลขฐานสิบเป็นเลขฐานสอง ตัวอย่าง : > 1011 Algorithm 1. loop (number > 0) 1.1 b = number modulo push (stack,b) 1.3 number = number / 2 2. loop (not empty(stack)) 2.1 pop(stack) stack 1 top stack 1 1 top stack top stack pop

13 Parenthesis matching Algorithm 1. loop (more data) 1.1 If character is ‘(‘ push(stack, character) 1.2 else if character is ‘)’ if empty (stack) then error 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 Algorithm 1. loop (more data) 1.1 If character is ‘(‘ push(stack, character) 1.2 else if character is ‘)’ if empty (stack) then error else pop(stack) 2. if not empty(stack) 2.1 error ตัวอย่าง : (A + B) + C) stack top stack ( top push(‘(’)pop stack empty stack error

15 การใช้ สแตก เพื่อแปลงนิพจน์ ทางคณิตศาสตร์ รูปแบบนิพจน์ทางคณิตศาสตร์ o Infix : A + B * C - D / E o Postfix : A B C * + D E / - Operators priority o priority 3 : + - o priority 2 : * / o priority 1 : ^ o priority 0 : ( มาก น้อย

16 Infix to Postfix Transformation Algorithm infix2postfix 1. CreateStack (s) 2. Loop (for each character in infix) 2.1 if (character = ‘(‘) pushStack (s, character) 2.2 elseif (character = ‘)’) popStack (s, character) loop (character ≠ ‘(‘) 1. print character 2. popStack (s, character)

17 Infix to Postfix Transformation Algorithm infix2postfix (cont.) 2.3 elseif (character = ‘*’, ‘/’, ‘+’, ‘-’, ‘^’) stackTop (s, toptoken) loop (not emptyStack (s) and priority(character) <= priority(toptoken)) 1. popStack (s, tokenout) 2. print tokenout 3. stackTop (s, toptoken) pushStack (s, character) 2.4 else 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 * + + * ABC

20 Infix to Postfix Transformation Infix : A + B * C - D / E Postfix : A B C * + D E / - A + B * C * + - D / E/ -

21 Algorithm Postfix Evaluation 1. createStack (s) 2. Loop (for each character) 2.1 if character is operand pushStack (s, character) 2.2 else popStack (s, oper2) popStack (s, oper1) operator  character value  calculate (oper1, operator, oper2) pushStack (s, value) 3. popStack (s, result) 4. end

22 Postfix Evaluation A B C + * * * 20

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 จัดทำโดย อ. ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะ วิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์ 24/96


ดาวน์โหลด ppt Stack. คุณลักษณะของสแตก o การนำข้อมูลเข้าและออกจากสแตกจะ กระทำที่ปลายข้างเดียวเท่านั้น o การทำงานของสแตกจะมีลักษณะแบบ เข้า หลัง ออกก่อน (LIFO: Last In,

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


Ads by Google