Data structure & Algorithms Stack Data structure & Algorithms
Stack เป็นโครงสร้างข้อมูลแบบ LIFO (Last-In, First-Out) www.themegallery.com Stack Stack เป็นโครงสร้างข้อมูลแบบ LIFO (Last-In, First-Out) Operations พื้นฐานของ Stack ได้แก่ - การนำข้อมูลเข้าสู่ Stack เรียกว่า Push - การนำข้อมูลออกจาก Stack เรียกว่า Pop - การเรียกใช้ข้อมูลจาก Stack เรียกว่า Top การสร้าง Stack - ใช้ Array แทน Stack - ใช้ Linked list แทน Stack Company Logo
www.themegallery.com Stack Company Logo
เพิ่มข้อมูลใน Stack: Push www.themegallery.com เพิ่มข้อมูลใน Stack: Push Company Logo
นำข้อมูลออกจาก Stack : Pop www.themegallery.com นำข้อมูลออกจาก Stack : Pop Company Logo
เรียกใช้ข้อมูลใน Stack: Top www.themegallery.com เรียกใช้ข้อมูลใน Stack: Top Company Logo
www.themegallery.com Company Logo
www.themegallery.com Company Logo
www.themegallery.com Linked list แทน Stack Company Logo
www.themegallery.com Linked list แทน Stack Company Logo
www.themegallery.com Company Logo
www.themegallery.com Company Logo
Operations พื้นฐานของ Stack ที่สร้างด้วย Linked list www.themegallery.com Operations พื้นฐานของ Stack ที่สร้างด้วย Linked list 1. Create stack: สร้าง stack head node 2. Push stack: เพิ่มรายการใน stack 3. Pop stack: ลบรายการใน stack 4. Stack top: เรียกใช้รายการข้อมูลที่อยู่บนสุดของ stack 5. Empty stack: ตรวจสอบว่า stack ว่างเปล่าหรือไม่ 6. Full stack: ตรวจสอบว่า stack เต็มหรือไม่ 7. Stack count: ส่งค่าจำนวนรายการใน stack 8. Destroy stack: คืนหน่วยความจำของทุก node ใน stack ให้ระบบ Company Logo
Stack Applications: Balancing Symbols www.themegallery.com Company Logo
The conversion time is O(n) www.themegallery.com Stack Applications: Infix to Postfix conversion The conversion time is O(n) Company Logo
Postfix expression evaluation www.themegallery.com The evaluation time is O(n) Company Logo
www.themegallery.com Backtracking Backtracking คือวิธีการหาคำตอบโดยเดินหน้าไปยังเป้าหมาย เมื่อถึงทางแยกก็จะต้องตัดสินใจเลือกเส้นทางใดเส้นทางหนึ่งเดินหน้าต่อไปเพื่อหาเป้าหมาย หากเดินไปจนสุดเส้นทางแล้วยังไม่พบเป้า ก็จะเดินย้อนกลับมายังจุดแยกครั้งสุดท้ายแล้วเลือกเส้นทางใหม่ที่ยังไม่เคยไป ทำเช่นนี้ไปเรื่อยๆจนกว่าจะพบเป้าหมาย หรือจนครบทุกเส้นทาง Backtracking เป็นการประยุกต์ใช้โครงสร้างข้อมูลแบบ Stack สำหรับการเขียนโปรแกรมประเภทเกมส์คอมพิวเตอร์ (computer gaming) การวิเคราะห์การตัดสินใจ(decision analysis) และระบบผู้เชี่ยวชาญ(expert system) ตัวอย่างปัญหาที่ใช้วิธี Backtracking เช่นปัญหาการค้นหาเป้าหมาย (goal seeking) และ ปัญหา 8 ราชินี (eight queens problem) Company Logo
Stack Applications: Backtracking www.themegallery.com Company Logo
Stack Applications: Backtracking www.themegallery.com Company Logo
Stack Applications: Backtracking www.themegallery.com Company Logo
Stack Applications: Backtracking www.themegallery.com Company Logo
Data structure & Algorithms Queue Data structure & Algorithms
Queue Queue เป็นโครงสร้างข้อมูลแบบ FIFO (First-In, First-Out) www.themegallery.com Queue Queue เป็นโครงสร้างข้อมูลแบบ FIFO (First-In, First-Out) Operations พื้นฐานของ Queue ได้แก่ - การนำข้อมูลเข้าสู่ Queue เรียกว่า Enqueue - การนำข้อมูลออกจาก Queue เรียกว่า Dequeue - การเรียกใช้ข้อมูลจากหัวแถวของ Queue เรียกว่า Front - การเรียกใช้ข้อมูลจากท้ายแถวของ Queue เรียกว่า Rear การสร้าง Queue - ใช้ Array แทน queue - ใช้ Linked list แทน queue Company Logo
www.themegallery.com The Queue concept Company Logo
www.themegallery.com Operation Enqueue Company Logo
www.themegallery.com Operation Dequeue Company Logo
www.themegallery.com Operation QueueFront Company Logo
Figure 5-5 www.themegallery.com Operation QueueRear Company Logo
Figure 5-6 www.themegallery.com Queue Operations Company Logo
www.themegallery.com Queue Operations Company Logo
โครงสร้างของ Queue แบบ Array www.themegallery.com โครงสร้างของ Queue แบบ Array Company Logo
www.themegallery.com Is queue full? Company Logo
www.themegallery.com Circular Queue Company Logo
โครงสร้างของ Queue แบบ Linked list www.themegallery.com โครงสร้างของ Queue แบบ Linked list Company Logo
www.themegallery.com Queue data structure Company Logo
Algorithm พื้นฐานของ Queue www.themegallery.com Algorithm พื้นฐานของ Queue 1. Create queue: สร้าง queue head จาก dynamic memory 2. Enqueue: เพิ่มรายการเข้าไปใน queue 3. Dequeue: ลบรายการออกจาก queue 4. Queue front: เรียกใช้ข้อมูลที่ด้านหน้าของ queue 5. Queue rear: เรียกใช้ข้อมูลที่ด้านหน้าของ queue 6. Empty queue: ตรวจสอบว่า queue ว่างหรือไม่ 7. Full queue: ตรวจสอบว่า queue เต็มหรือไม่ (มีหน่วยความจำ จัดให้ได้หรือไม่) 8. Queue count: บอกจำนวนรายการใน queue 9. Destroy queue: ลบข้อมูลทั้งหมดใน queue และคืนหน่วยความจำ ให้ระบบแล้วลบและคืนหน่วยความจำของ head node Company Logo
www.themegallery.com Create and enqueue Company Logo
www.themegallery.com Company Logo
เพิ่มข้อมูลเข้า Queue www.themegallery.com เพิ่มข้อมูลเข้า Queue Company Logo
ลบข้อมูลออกจากเข้า Queue www.themegallery.com ลบข้อมูลออกจากเข้า Queue Company Logo
อักขระย่อย1.อักขระย่อย2 www.themegallery.com Queue Application การเขียนฟังก์ชันชื่อ matching เพื่ออ่านอักขระจากแป้นพิมพ์ แล้วทำการตรวจสอบดูว่า อักขระที่อ่านมานั้น อักขระทุกตัวก่อนหน้าจุดและอักขระทุกตัวที่อยู่หลังจุด เหมือนกันหรือไม่ ถ้าเหมือนกันฟังก์ชันจะส่งคืนค่า 1 มิฉะนั้นจะคืนค่า 0 โดยลักษณะของอักขระที่อ่านจากแป้นพิมพ์ มีดังนี้ อักขระย่อย1.อักขระย่อย2 โดยที่อักขระย่อยก่อนหน้าจุดและอักขระย่อยหลังจุดมีขนาดความยาวเท่ากัน Company Logo
while((c1=getchar()) != '.') enq(queue, c1); match = 1; www.themegallery.com int matching() { char c1, c2; QueueType queue; int match; clearQ(queue); while((c1=getchar()) != '.') enq(queue, c1); match = 1; while(!emptyQ(queue)&& match) { c1 = deq(queue); c2 = getchar(); if (c2 != c1) match = 0; } return (match); Company Logo