7.8.52

Queue

DTS 06-05-08-2552

คิว
เป็นข้อมูลหลายรายการอยู่ต่อเนื่องกัน การนำข้อมูลเข้าและออกจาก คิว มีเงื่อนไขว่าข้อมูล ที่มาก่อนจะออกก่อน(FIFO = First In First Out) ตัวอย่าง คิว ในชีวิตประจำวัน ได้แก่
- คิวของคนรอถอนเงินจากธนาคาร
- คิวของนักเรียนรอรับอาหารจากโรงเรียน
- คิวของคนรอจ่ายเงินในซุปเปอร์มาเก็ต

ลักษณะของโครงสร้างแบบคิวจะเหมือนกับการเข้าแถวรอคอย ไม่ว่าจะเป็นการรอคอยอะไรก็ตาม หรือจะเรียกสั้นๆ ว่า เข้าคิวก็ได้ ด้วยคุณสมบัติที่เด่นชัดของการทำงานของโครงสร้างข้อมูลแบบคิวนี้ ว่าสิ่งใดที่เข้าก่อนย่อมต้องได้รับการทำงานก่อน เช่น การสั่งพิมพ์งานพร้อมกันหลายๆ คน โดยใช้เครื่องพิมพ์เครื่องเดียวกัน ทำให้ระบบจะต้องมีการจัดระบบให้มีการเข้าคิวรอคอยการทำงาน ถ้าใครสั่งพิมพ์ก่อนก็จะเข้าคิวไปรอการพิมพ์ในลำดับแรก ใครสั่งเป็นคนต่อไปก็จะต้องเข้าคิวรอจนกว่างานแรกจะทำการพิมพ์เสร็จ จึงจะมาทำงานกับคิวที่รออยู่ต่อไป

การสร้างคิว (Queue)
คิวที่อยู่ในคอมพิวเตอร์สามารถจัดเก็บได้หลายลักษณะ แต่โดยทั่วไปแล้วจะใช้การจัดเก็บแบบลิงค์ลิสท์เดี่ยวหรือจัดเก็บโดยใช้อาร์เรย์
ก่อนที่จะทำการสร้างคิวจะต้องทำความเข้าใจถึงโครงสร้างของคิว ซึ่งประกอบไปด้วย ตัวคิว ซึ่งในที่นี้ขอแทนด้วยอาร์เรย์ และจะต้องมีตัวชี้อีก 2 ตัว ได้แก่ ตัวชี้ F (Front Pointer) ชี้ไปที่สมาชิกตัวแรก และตัวชี้ R (Rear Pointer) ชี้ไปที่สมาชิกตัวสุดท้ายของคิว โดยที่เวลาข้อมูลจะเข้าสู่คิวจะเข้าทาง R ส่วนเวลาที่ข้อมูลจะออกจากคิวจะออกทาง F

ในการปฏิบัติการบนระบบคอมพิวเตอร์สามารถใช้ อาร์เรย์ หนึ่งมิติ แทนข้อมูลชนิดคิวได้ดังนี้
Var Q : array[1..10] Of Char;
กำหนดให้ Q เป็นตัวแปรแบบอาร์เรย์ หนึ่งมิติมีสมาชิกได้ 10 ชุดข้อมูล นั่นหมายความว่าสามารถมีข้อมูลใน คิว ได้เพียง 10 ข้อมูลเท่านั้น

การปฏิบัติการกับคิว มี 2 รูปแบบ คือ
(ก) การเพิ่มโหนด(Append Queues)
(ข) การลบโหนด(Deleat Queues)

2. สแตก(Stack)สแตก(Stack) เป็นข้อมูลหลายรายการซึ่งอยู่ต่อเนื่องกัน การนำข้อมูลเข้าและออกจากสแตก มีเงื่อนไขว่า ข้อมูลที่เข้าทีหลังจะออกก่อน(LIFO = Last In First Out)
ตัวอย่างสแตก ได้แก่
- ถาดจานที่วางซ้อนกัน ใบที่อยู่บนสุดจะถูกหยิบออกไปใช้ก่อน
สแตก มีใช้กันมากใน System Software เช่น Dos รวมทั้งคอมไพล์เลอร์ และ อินเตอร์พรีเตอร์ ก็ใช้สแตกด้วย เช่นกัน
ในการปฏิบัติการบนระบบคอมพิวเตอร์สามารถใช้ อาร์เรย์ หนึ่งมิติ แทนข้อมูลชนิดแสตก ได้ดังนี้
Var St : array[1..10] Of Char;

3. ลิงค์ลิสต์(Linked Lists Type)ลิงค์ลิสต์(Linked List) เป็นข้อมูลที่ประกอบด้วยกลุ่ม(List) รายการ(Item) ข้อมูล แต่ละรายการข้อมูลมีส่วน ประกอบสองส่วนคือ ส่วนที่เป็นรายละเอียดข้อมูล(Information) และส่วนที่เป็นพอยน์เตอร์ของรายการ ข้อมูลแรกจะเชื่อมโยง(Link) ไปที่รายการข้อมูล

4. ทรี(Tree)ทรี(Tree - ต้นไม้) เป็นข้อมูลซึ่งประกอบด้วยข้อมูลรายการแรก เรียกว่า รูท(Root) จากรูทจะมีการเชื่อมโยงไปยังรายการข้อมูลอื่น ข้อมูลแต่ละรายการเรียกว่า โหนด(Node) หรือ ลีฟ(Leaf) ของทรี ทรีที่เป็นส่วนหนึ่งของทรีหนึ่งเรียกว่า สับทรี(Sub-tree) โหนดที่ไม่มีสับทรีเรียกว่าเทอร์มินอลโหนด(Terminal Node) จำนวนชั้นจากรูทถึงโหนดสุดท้าย เรียกว่า ความสูง(Height) ของทรี