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

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

2 โครงสร้างข้อมูลแบบสแตก (STACK).

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


งานนำเสนอเรื่อง: "2 โครงสร้างข้อมูลแบบสแตก (STACK)."— ใบสำเนางานนำเสนอ:

1 2 โครงสร้างข้อมูลแบบสแตก (STACK)

2 ความหมายของ Stack เป็นโครงสร้างข้อมูลที่สมาชิกมีลักษณะเป็นแถวเรียงต่อกัน โดยเมื่อมีสมาชิกเข้ามาใหม่จะต้องเข้าที่ปลายหรือด้านบนของ Stack และเมื่อมีสมาชิกออกจะต้องออกจากปลายหรือด้านบนของ Stack การนำข้อมูลเข้าสู่ stack และการนำข้อมูลออกจาก stack จะทำได้ที่ปลายด้านหนึ่งของ stack เท่านั้น โครงสร้างข้อมูลแบบนี้จึงถูกเรียกว่า “LIFO” (LAST IN FIRST OUT) เพราะสมาชิกที่เข้ามาใน Stack หลังสุดจะต้องออกก่อนเสมอ

3 การดำเนินงานของ Stack
PUSH คือการนำสมาชิกใหม่เข้าไปเก็บสู่ Stack โดยจะเป็นการนำไปเก็บที่ด้านบนสุดของ Stack POP คือการนำสมาชิกที่อยู่ใน Stack ออกจาก Stack โดยจะเป็นการนำออกที่ด้านบนสุดของ Stack

4 การดำเนินงานของ Stack
B A C C B A การนำข้อมูลเข้า (PUSH) การนำข้อมูลออก (POP)

5 การดำเนินงานของ Stack
เพราะการจะ POP Stack ได้ก็ต่อเมื่อมีสมาชิกใน Stack แต่ถ้าไม่มีจะไม่สามารถนำข้อมูลออกได้ เรียกว่า “Empty Stack” หรือ “Stack Under Flow” การตรวจสอบดูว่า Stack เต็มหรือไม่ ? เพราะการจะ Push Stack ได้ก็ต่อเมื่อมีพิ้นที่เหลือใน Stack แต่ถ้าไม่มีจะไม่สามารถนำข้อมูลเข้าได้ เรียกว่า “Full Stack” หรือ “Stack Over Flow”

6 การสร้าง Stack ด้วยโครงสร้างข้อมูล Array (Implementation of Stack as Array)
ประกอบไปด้วย ตัวสแตก ( อาจจะเป็น ARRAY ได้ หรือ Link List) ตัวระบุค่าของ stack (stack pointer) มีเพื่อระบุว่าค่าที่อยู่บนสุดของสแตกคือค่าใด บางครั้งเรียกว่า “ทอปพอยน์เตอร์ของสแตก” / TOP OF STACK โปรแกรมย่อย 2 โปรแกรมคือ POP() และ PUSH() โปรแกรมย่อย 2 โปรแกรมคือ EmptyStack() และ FullStack()

7 การดำเนินการ PUSH() 1. ตรวจสอบว่า Stack เต็ม ?
โดยการตรวจสอบว่า Top เท่ากับ MaxStack ? ใช้ Function FullStack() ถ้า Stack เต็ม แสดงว่า "Stack Overflow“ หรือ “Full Stack” แล้วเลิกงาน ถ้า Stack ไม่เต็ม ให้ทำงานข้อที่ 2 และ 3 2. ให้เพิ่มค่าของ Top อีก 1 3. ใส่ข้อมูลลงใน Stack ในตำแหน่งของตัวแปร Top

8 การดำเนินการ POP() 1. ตรวจสอบว่า Stack ว่างเปล่า ?
โดยการตรวจสอบว่า Top เท่ากับ 0 ? ใช้ Function EmptyStack() ถ้า Stack ว่าง แสดงว่า "Stack Under flow" หรือ “Full Stack”แล้วเลิกงาน ถ้า Stack ไม่ว่าง ให้ทำงานข้อที่ 2 และ 3 2. นำค่าของ Stack ในตำแหน่ง Top มาเก็บในตัวแปร 3. ให้ลดค่าของ Top อีก 1 4. แสดงค่าที่ POP ได้

9 ตัวอย่างการประยุกต์ใช้งาน Stack
การใช้งานสแตกสำหรับการเขียนโปรแกมประโยคย้อนหลัง การใช้งานสแตกสำหรับการแปลงรูปนิพจน์ทางคณิตศาสตร์ การแปลงนิพจน์ทางคณิตศาสตร์เป็นกระบวนการที่สำคัญต่อคอมไพลเลอร์ (COMPLIER) เพื่อที่จะทำการแปลงไปเป็นชุดคำสั่งของภาษาเครื่อง

10 การใช้งานสแตก สำหรับการแปลงรูปนิพจน์ทางคณิตศาสตร์
รูปแบบนิพจน์คำนวณ (Arithmetic Expression) Infix Notation : A + B Prefix Notation : + A B Postfix Notation : A B + เช่น INFIX : (A + B) * (C - D) / E PREFIX : / * + A B – C D E POSTFIX : A B + C D - * E /

11 Algorithm ในการแปลง Infix เป็น Postfix
ตรวจสอบ Token (OPERAND OPERATOR CONSTANT VARIABLE วงเล็บ “)” ทีละ Token ถ้าเป็น วงเล็บเปิด “(” ให้ Push เข้าสแตก ถ้าเป็น วงเล็บปิด “)” ให้ Pop Stack ออกมาที่ละตัวจนกว่าจะเจอ วงเล็บเปิด “(” ไม่ต้องรวมวงเล็บเข้าไปใน ผลลัพธ์ ถ้าเป็น ตัวถูกดำเนินการ (ตัวแปร ค่าคงที่) ให้นำไปเป็นผลลัพธ์

12 Algorithm ในการแปลง Infix เป็น Postfix
ถ้าเป็น ตัวดำเนินการ (เครื่องหมาย) ถ้าสแตกว่าง ให้ PUSH ลงในสแตก ถ้าสแตกไม่ว่าง ให้ทำการเปรียบเทียบลำดับการทำงานของตัวดำเนินการที่อยู่ในสแตก ถ้าลำดับมากกว่า ให้ PUSH ลงในสแตก ถ้าน้อยกว่าหรือเท่ากัน ให้ POP ตัวดำเนินการที่อยู่ในสแตก ออกมาใส่ที่ผลลัพธ์ แล้วเปรียบเทียบใหม่ * * * ให้ถือว่า วงเล็บ () มีค่าความสำคัญต่ำที่สุด ถ้าข้อมูลหมดให้ POP ที่เหลือไปไว้ที่ผลลัพธ์

13 ลำดับการทำงานของ ตัวดำเนินการทางคณิตศาสตร์
ลำดับการทำงานของตัวดำเนินการทางคณิตศาสตร์ เครื่องหมายยกกำลัง (^) เครื่องหมาย คูณ (*) และ หาร(/) เครื่องหมาย บวก(+) และ ลบ(-) ถ้าลำดับเดียวกันทำจากซ้ายไปขวา แต่ถ้าเป็นเครื่องหมาย ยกกำลังทำจากขวาไปซ้าย

14 ตัวอย่าง จงแปลงจากนิพจน์ Infix : เป็นนิพจน์ Postfix ?
ตัวอย่าง : การแปลงนิพจน์ INFIX TO POSTFIX และ การหาค่าผลลัพธ์จากนิพจน์ Postfix ตัวอย่าง จงแปลงจากนิพจน์ Infix : เป็นนิพจน์ Postfix ? A + B – C  A B + C – A * (B + C) – D / E  A B C + * D E / - A + (B + C / D - E) / F * G A B C D / + E – F / G * +

15 Algorithm ในการหาค่าผลลัพธ์จาก Postfix
ตรวจสอบ Token (OPERAND OPERATOR CONSTANT VARIABLE วงเล็บ ) ที่ละ Token ถ้าเป็น Operand ให้ Push ลง Stack ถ้าเป็น Operator ให้ Pop ค่า 2 ค่าจาก Stack แล้วกระทำกันโดยใช้ Operator (ตัวที่กำลังตรวจสอบ) จากนั้นทำการ Push ผลลัพธ์ลงใน Stack โดยที่ค่าที่ออกจาก Stack ตัวแรกกำหนดให้เป็น Operand ตัวที่2 (ขวามือของเครื่องหมาย)

16 ตัวอย่าง : การแปลงนิพจน์ INFIX TO POSTFIX และ การหาค่าผลลัพธ์จากนิพจน์ Postfix
ตัวอย่าง จงแปลงจากนิพจน์ Infix : เป็นนิพจน์ Postfix ? แล้วทำการหาค่าผลลัพธ์ A + B – C : A = 10 , B = 20 , C = 5  A B + C – PUSH (A) PUSH (B) POP()  A POP()  B B + A = 30 PUSH(30) PUSH (C) POP()  C POP()  30 30 – C 30 – 5 = 25

17 ตัวอย่าง : การแปลงนิพจน์ INFIX TO POSTFIX และ การหาค่าผลลัพธ์จากนิพจน์ Postfix
ตัวอย่าง จงแปลงจากนิพจน์ Infix : เป็นนิพจน์ Postfix ? แล้วทำการหาค่าผลลัพธ์ A + B / C * D –E : A = 1 , B = 6 , C = 3 , D = 4 , E = 7 A B C / D * + E – PUSH (A) PUSH (B) PUSH (C) POP()  C POP()  B B / C  6 / 3 = 2  PUSH(2) PUSH (D) POP()  D POP()  2 2 * D  2 * 4 = 8  PUSH(8) POP()  8 POP()  A A + 8  = 9  PUSH(9) PUSH (E) POP()  E POP()  9 9 – E  9 – 7 = 2  PUSH(2)

18 ตัวอย่าง : การแปลงนิพจน์ INFIX TO POSTFIX และ การหาค่าผลลัพธ์จากนิพจน์ Postfix
ตัวอย่าง จงแปลงจากนิพจน์ Infix : เป็นนิพจน์ Postfix ? แล้วทำการหาค่าผลลัพธ์ A * ( B / C * D) – E + I A = 3 , B = 6 , C = 3 , D = 1 , E = 5 , I = 13


ดาวน์โหลด ppt 2 โครงสร้างข้อมูลแบบสแตก (STACK).

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


Ads by Google