คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Bansomdej Chaopraya Rajabhat University
Advertisements

จงเขียนโปรแกรมในการคำนวณหาค่า function ข้างล่างโดยอาศัยหลักการ
สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
Lists Data Structure LAUKHWAN NGAMPRASIT LAUKHWAN NGAMPRASIT.
โดยอาจารย์ศิริพร ศักดิ์บุญญารัตน์ ครูชำนาญการ โรงเรียนมหิดลวิทยานุสรณ์
ตัวแปรชุด การเขียนโปรแกรมภาษาคอมพิวเตอร์ 1
บทที่ 5 โครงสร้างข้อมูลคิว
สายอักขระและ การประมวลผลสายอักขระ (String and String manipulation)
Data Type part.II.
Data Type part.III.
Stack.
Stack Holidays/seasonal content.
การเรียงลำดับและการค้นหาแบบง่าย
แถวคอย (Queue).
บทนำ.
Data structure & Algorithms
LAB # 5 Computer Programming 1 1.
ลักษณะการทำงานของ Stack
การใช้ PHP ติดต่อกับ Text File
Week 6 ประกาศค่าตัวแปร.
บรรยายครั้งที่ 3: Queue
บรรยายครั้งที่ 2: Stack
Linked-List (รายการโยง)
ปฏิบัติการครั้งที่ 9 ฟังก์ชัน.
โปรแกรมย่อย : Pascal Procedure
การเขียนโปรแกรม ASP การประกาศตัวแปร
ตัวแปรชุด.
Lecture no. 10 Files System
การประกาศตัวแปร “ตัวแปร” คือสิ่งที่เราสร้างขึ้นมาเพื่อใช้เก็บค่าต่างๆและอ้างอิงใช้งานภายในโปรแกรม ตามที่เรากำหนดขึ้น การสร้างตัวแปรขึ้นมาเราเรียกว่า.
คิวQueue Circular Queue.
SCC : Suthida Chaichomchuen
Selected Topics in IT (Java)
บทที่ 4 Method (2).
อาร์เรย์และข้อความสตริง
Javascripts.
อาร์เรย์ (Array).
อาร์เรย์ (Array).
โครงสร้างข้อมูลแบบคิว
คิว ลักษณะการทำงานของ Queue การดำเนินการของ Queue การตรวจสอบ Queue
สแตค(stack) โครงสร้างข้อมูลแบบ Stack - การสร้าง Stack
List ADTs By Pantharee S..
Linked List (ลิงค์ลิสต์)
บทที่ 5 Link List Link List.
โปรแกรมประยุกต์อื่นๆ
Linked List List is group of nodes that consists of data and link.
ลิงค์ลิสต์ (Linked List)
การใช้ PHP ติดต่อกับ Text File
Advanced Class Design in Java Java Packages Week #6 Jarungjit Parnjai
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
กองซ้อน ยอดกองซ้อน (stack).
โครงสร้างข้อมูลแบบกองซ้อน (Stack)
Java collection framework
โครงสร้างข้อมูล Queues
โครงสร้างข้อมูลแบบลิงก์ลิสต์
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
โครงสร้างข้อมูลแบบ สแตก (stack)
รายการ (Lis t) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong.
Computer Programming Asst. Prof. Dr. Choopan Rattanapoka
Linked List (2) Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
รศ. ดร. บุญธีร์ เครือตราชู รศ. กฤตวัน ศิริบูรณ์ KMITL Data Structures & Algorithms : Stack & Queue 1 Stack & Queue Lecturers : Boontee Kruatrachue.
QueueQueue Lecturer : Kritawan Siriboon, Room no. 913 Text : Data Structures & Algorithm Analysis in C, C++,… Mark Allen Weiss, Addison Wesley.
Linked List ( ต่อ ) Lecturer : Kritawan Siriboon, Room no. 913 Text : Data Structures & Algorithm Analysis in C, C++,… Mark Allen Weiss, Addison Wesley.
Queue Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
Queue Lecturer : Kritawan Siriboon, Room no. 913
Linked List.
Queue [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Data Structure & Algorithm Concept
Linked List.
Queue [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Linked List (ต่อ) Lecturer : Kritawan Siriboon, Room no. 913
ใบสำเนางานนำเสนอ:

คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว (Deletion) จะกระทำที่อีกปลายหนึ่งของ List 25 June 2006 12.00 AM Week 08 - Queue

คิว (Queue) การดำเนินการ (Operation) พื้นฐานบนคิว Enqueue คือการ Insert สมาชิกลงไปที่ด้านปลายของ List ซึ่งเรียกว่าตำแหน่ง Rear Dequeue คือการ Delete และ Return ค่าสมาชิกที่ด้านหัว List ซึ่งเรียกว่าตำแหน่ง Front 25 June 2006 12.00 AM Week 08 - Queue

ลักษณะของ Queue (Abstract Model of a Queue) การดำเนินการทุกอย่างบน Queue ไม่ว่าจะเกิดจากการสร้างโดยใช้ Array หรือการสร้างโดยใช้ List ก็ตาม ล้วนมี running time เป็น O(1) ซึ่งน้อยมากๆ 25 June 2006 12.00 AM Week 08 - Queue

การสร้าง Queue โดยใช้ Array (Array Implementation of Queue) สำหรับโครงสร้างข้อมูลแบบ Queue แต่ละตัวเราต้องเก็บค่าต่างๆของ Queue ดังนี้ queue[ ] อาร์เรย์เก็บค่าสมาชิกแต่ละตัวในคิว front ตำแหน่งปลายด้านหัวของคิว rear ตำแหน่งปลายด้านท้ายของคิว size จำนวนสมาชิกที่มีอยู่ในคิวทั้งหมด 25 June 2006 12.00 AM Week 08 - Queue

การสร้าง Queue โดยใช้ Array (Array Implementation of Queue) 56 85 12 8 X rear rear front Enqueue enqueue ข้อมูล element X ลงไปในคิว 1. เพิ่มค่า size และเพิ่มค่า rear 2. set ค่า queue[rear] = X 25 June 2006 12.00 AM Week 08 - Queue

การสร้าง Queue โดยใช้ Array (Array Implementation of Queue) 56 85 12 8 front front rear Dequeue ในการ dequeue ข้อมูล element หนึ่งๆออกไป 1. return ค่า queue[front] 2. ลดค่า size และเพิ่มค่า front ขึ้นหนึ่งค่า 25 June 2006 12.00 AM Week 08 - Queue

Circular Array Implementation เมื่อไรก็ตามที่ค่า Front และ Rear ขึ้นลงไปถึงสุดขอบเขตของอาร์เรย์ ให้รวบกลับขึ้นมาเป็นส่วนเริ่มต้นของอาร์เรย์ เรียกว่าเป็นการสร้างโดยใช้ Circular Array ถ้าไม่ว่าการเพิ่มค่า Front หรือค่า Rear ทำให้เกินขอบเขตของอาร์เรย์ ค่าตำแหน่งจะถูก reset กลับไปเป็นตำแหน่งแรกของอาร์เรย์ 25 June 2006 12.00 AM Week 08 - Queue

ข้อที่ควรระวังในการใช้ Circular Array เราต้องตรวจสอบว่า Queue ดังกล่าวเป็นคิวเปล่า (Empty Queue) หรือไม่ เนื่องจากการ Dequeue ในขณะที่คิวว่างจะเป็นการ return ค่าที่ไม่ได้รับการกำหนดค่าเป็นขยะออกมา ซึ่งเราอาจไม่ได้สังเกตข้อผิดพลาดนี้ ขนาดของ Queue ในขณะที่คิวว่าง (Empty Queue) จะได้ rear = front -1 เมื่อไม่ใช้ Circular Array ขนาดของอาร์เรย์เป็น Asize คิวจะเต็มเมื่อมีสมาชิกทั้งหมด Asize ตัว 25 June 2006 12.00 AM Week 08 - Queue

ตัวอย่างการดำเนินการบน Queue สถานะเริ่มต้น (Initial State) หลังจาก Enqueue(1) 25 June 2006 12.00 AM Week 08 - Queue

หลังจาก Dequeue ซึ่งเป็นการ Return ค่า 2 ออกมา Enqueue(3) หลังจาก Dequeue ซึ่งเป็นการ Return ค่า 2 ออกมา 25 June 2006 12.00 AM Week 08 - Queue

หลังจากการ Dequeue ซึ่งเป็นการ Return ค่า 4 ออกมา 25 June 2006 12.00 AM Week 08 - Queue

หลังจากการ Dequeue ซึ่งเป็นการ Return ค่า 3 ออกมา และทำให้คิวว่าง (Make Empty Queue) สังเกตว่า Rear = Front - 1 25 June 2006 12.00 AM Week 08 - Queue

การประกาศ Queue ADTs /*Declare Function Prototype*/ PtrToQRecord createQueue(int); void makeEmpty(PtrToQRecord); Boolean isEmpty(PtrToQRecord); Boolean isFull(PtrToQRecord); void front(PtrToQRecord); void enqueue(TypeOfElement, PtrToQRecord); void dequeue(PtrToQRecord); void deleteQueue(PtrToQRecord); const CAPACITY; Struct QueueRecord { int front; int rear; int size; TypeOfElement queuearray[CAPACITY]; }; 25 June 2006 12.00 AM Week 08 - Queue

โครงสร้างของ Structure สำหรับ Queue QueueRecord Struct QueueRecord { int front; int rear; int size; int queueArray[CAPACITY]; } int front int rear int size int queueArray 25 June 2006 12.00 AM Week 08 - Queue

การตรวจสอบว่าอาร์เรย์ของ Queue เป็นอาร์เรย์เปล่าหรือไม่ IsEmpty การตรวจสอบว่าอาร์เรย์ของ Queue เป็นอาร์เรย์เปล่าหรือไม่ Algorithm Boolean isEmpty(pointerToQRecord) pointerToQRecord – pointer to queue record Output True – if the queue is empty False – if the queue is not empty Begin (return size of pointerToQRecord is 0) End 25 June 2006 12.00 AM Week 08 - Queue

MakeEmpty การทำให้คิวเป็นคิวว่าง Algorithm makeEmpty(pointerToQRecord) pointerToQRecord – pointer to queue record Begin (Set size of pointerToQRecord to 0) (Set front of pointerToQRecord to 1) (Set rear of pointerToQRecord to 0) End 25 June 2006 12.00 AM Week 08 - Queue

Enqueue การ Enqueue ใส่ข้อมูลลงในคิว Algorithm enqueue(newElement, pointerToQRecord) newElement – new element to be entered into the queue pointerToQRecord – pointer to queue record Begin If (isFull(pointerToQRecord) is True) (Show Error Full Queue) Else { (Increase size of pointerToQRecord by 1) If ((rear of pointerToQRecord + 1) = CAPACITY) (Set rear of pointerToQRecord to 0) (Increase rear of pointerToQRecord by 1) (Set queueArray of pointerToQRecord [rear of pointerToQRecord] to newElement) } End 25 June 2006 12.00 AM Week 08 - Queue