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

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

Stack Holidays/seasonal content.

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


งานนำเสนอเรื่อง: "Stack Holidays/seasonal content."— ใบสำเนางานนำเสนอ:

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


ดาวน์โหลด ppt Stack Holidays/seasonal content.

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


Ads by Google