430 likes | 743 Views
Stack. Data structure & Algorithms. Stack. Stack เป็นโครงสร้างข้อมูลแบบ LIFO (Last-In, First-Out) Operations พื้นฐานของ Stack ได้แก่ - การนำข้อมูลเข้าสู่ Stack เรียกว่า Push - การนำข้อมูลออกจาก Stack เรียกว่า Pop - การเรียกใช้ข้อมูลจาก Stack เรียกว่า Top
E N D
Stack Data structure & Algorithms
Stack • Stack เป็นโครงสร้างข้อมูลแบบ LIFO (Last-In, First-Out) • Operations พื้นฐานของ Stack ได้แก่ - การนำข้อมูลเข้าสู่ Stack เรียกว่า Push - การนำข้อมูลออกจาก Stack เรียกว่า Pop - การเรียกใช้ข้อมูลจาก Stack เรียกว่า Top • การสร้าง Stack - ใช้ Array แทน Stack - ใช้ Linked list แทน Stack Company Logo
Stack Company Logo
เพิ่มข้อมูลใน Stack: Push Company Logo
นำข้อมูลออกจาก Stack : Pop Company Logo
เรียกใช้ข้อมูลใน Stack: Top Company Logo
Linked listแทนStack Company Logo
Linked listแทนStack Company Logo
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 Company Logo
Stack Applications: Infix to Postfix conversion The conversion time is O(n) Company Logo
Postfix expression evaluation The evaluation time is O(n) Company Logo
Backtracking Backtracking คือวิธีการหาคำตอบโดยเดินหน้าไปยังเป้าหมายเมื่อถึงทางแยกก็จะต้องตัดสินใจเลือกเส้นทางใดเส้นทางหนึ่งเดินหน้าต่อไปเพื่อหาเป้าหมายหากเดินไปจนสุดเส้นทางแล้วยังไม่พบเป้าก็จะเดินย้อนกลับมายังจุดแยกครั้งสุดท้ายแล้วเลือกเส้นทางใหม่ที่ยังไม่เคยไปทำเช่นนี้ไปเรื่อยๆจนกว่าจะพบเป้าหมายหรือจนครบทุกเส้นทาง Backtracking เป็นการประยุกต์ใช้โครงสร้างข้อมูลแบบ Stack สำหรับการเขียนโปรแกรมประเภทเกมส์คอมพิวเตอร์ (computer gaming) การวิเคราะห์การตัดสินใจ(decision analysis) และระบบผู้เชี่ยวชาญ(expert system) ตัวอย่างปัญหาที่ใช้วิธี Backtracking เช่นปัญหาการค้นหาเป้าหมาย (goal seeking) และปัญหา 8 ราชินี (eight queens problem) Company Logo
Stack Applications: Backtracking Company Logo
Stack Applications: Backtracking Company Logo
Stack Applications: Backtracking Company Logo
Stack Applications: Backtracking Company Logo
Queue Data structure & Algorithms
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
The Queue concept Company Logo
Operation Enqueue Company Logo
Operation Dequeue Company Logo
Operation QueueFront Company Logo
Figure 5-5 Operation QueueRear Company Logo
Figure 5-6 Queue Operations Company Logo
Queue Operations Company Logo
โครงสร้างของQueue แบบArray Company Logo
Is queue full? Company Logo
Circular Queue Company Logo
โครงสร้างของQueue แบบLinked list Company Logo
Queue data structure Company Logo
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
Create and enqueue Company Logo
เพิ่มข้อมูลเข้า Queue Company Logo
ลบข้อมูลออกจากเข้า Queue Company Logo
Queue Application การเขียนฟังก์ชันชื่อ matching เพื่ออ่านอักขระจากแป้นพิมพ์ แล้วทำการตรวจสอบดูว่า อักขระที่อ่านมานั้น อักขระทุกตัวก่อนหน้าจุดและอักขระทุกตัวที่อยู่หลังจุด เหมือนกันหรือไม่ ถ้าเหมือนกันฟังก์ชันจะส่งคืนค่า 1 มิฉะนั้นจะคืนค่า 0 โดยลักษณะของอักขระที่อ่านจากแป้นพิมพ์ มีดังนี้ อักขระย่อย1.อักขระย่อย2 โดยที่อักขระย่อยก่อนหน้าจุดและอักขระย่อยหลังจุดมีขนาดความยาวเท่ากัน Company Logo
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