คิวคือโครงสร้างข้อมูลเชิงเส้นที่ลำดับการดำเนินการคือ FIFO (เข้าก่อนออกก่อน)
อาร์เรย์คือโครงสร้างข้อมูลที่มีองค์ประกอบของประเภทข้อมูลเดียวกัน ซึ่งจัดเก็บไว้ในตำแหน่งหน่วยความจำแบบต่อเนื่อง
ในคิวการดำเนินการแทรกและการลบที่ทำที่ปลายอีกด้านของคิว การนำไปใช้งานนั้นซับซ้อนกว่าเล็กน้อยเมื่อเทียบกับสแต็ก
ในการใช้งานอาร์เรย์ของคิว เราสร้างคิวอาร์เรย์ขนาด n โดยมีตัวแปรสองตัวบนและล่าง
ตอนนี้ในตอนแรกอาร์เรย์ว่างเปล่านั่นคือทั้งด้านบนและด้านล่างอยู่ที่ 0 ดัชนีของอาร์เรย์ และเมื่อเพิ่มองค์ประกอบลงในคิว (การแทรก) ค่าของตัวแปรท้ายจะเพิ่มขึ้น ค่าของส่วนท้ายสามารถเพิ่มขึ้นได้ถึง n นั่นคือความยาวสูงสุดของอาร์เรย์
เมื่อองค์ประกอบจะถูกลบออกจากคิว (การลบ) ค่าของตัวแปรบนจะเพิ่มขึ้น ค่าสูงสุดสามารถขึ้นไปถึงค่าสิ้นสุดได้
การดำเนินการตามคิว
เข้าคิว - เป็นการดำเนินการสำหรับการเพิ่มองค์ประกอบในคิว ก่อนเพิ่มองค์ประกอบในคิวเราจะตรวจสอบว่าคิวเต็มหรือไม่ เงื่อนไขการตรวจสอบสิ้นสุดลง หากน้อยกว่า n เราสามารถเก็บองค์ประกอบไว้ที่คิว[end] และเพิ่มขึ้นสิ้นสุดที่ 1.
เงื่อนไขล้นคือเมื่ออาร์เรย์เต็มเช่น end ==n.
ดีคิว - เป็นการดำเนินการลบองค์ประกอบของคิว ก่อนลบองค์ประกอบของคิวเราจะตรวจสอบว่าคิวว่างหรือไม่ เงื่อนไขในการตรวจสอบว่าคิวว่างหรือไม่ ตรวจสอบค่าบนและล่าง ถ้า top ==end กว่าอาร์เรย์ว่างเปล่า
หากมีองค์ประกอบ เราจะทำการดีคิวอาร์เรย์ โดยเลื่อนองค์ประกอบทั้งหมดทางด้านซ้ายของอาร์เรย์ไปทีละรายการ
ด้านหน้า - แยกองค์ประกอบแรกของคิวเช่น array[top] การดำเนินการนี้สามารถทำได้เมื่ออาร์เรย์ไม่ว่างเปล่าเท่านั้น
การแสดงผล - การดำเนินการนี้แสดงองค์ประกอบทั้งหมดของคิว คือข้ามคิว
อัลกอริทึม
ENQUEUE : Step 1 : if (end == n), print : “OVERFLOW”. Exit Step 2 : queue[end] = data and end++ DEQUEUE : Step 1 : If (top == 0), print : “empty Queue”. Exit Step 2 : shift all elements one position left. End-- ;
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; struct Queue { int top, end, n; int* queue; Queue(int c){ top = end = 0; n = c; queue = new int; } ~Queue() { delete[] queue; } void Enqueue(int data){ if (n == end) { printf("\nQueue is full\n"); return; } else { queue[end] = data; end++; } return; } void Dequeue(){ if (top == end) { printf("\nQueue is empty\n"); return; } else { for (int i = 0; i < end - 1; i++) { queue[i] = queue[i + 1]; } end--; } return; } void Display(){ int i; if (top == end) { printf("\nQueue is Empty\n"); return; } for (i = top; i < end; i++) { printf(" %d <-- ", queue[i]); } return; } void Front(){ if (top == end) { printf("\nQueue is Empty\n"); return; } printf("\nFront Element is: %d", queue[top]); return; } }; int main(void){ Queue q(4); q.Display(); q.Enqueue(12); q.Enqueue(89); q.Enqueue(65); q.Enqueue(34); q.Display(); q.Enqueue(92); q.Display(); q.Dequeue(); q.Dequeue(); q.Display(); q.Front(); return 0; }
ผลลัพธ์
Queue is Empty 12 <-- 89 <-- 65 <-- 34 <-- Queue is full 12 <-- 89 <-- 65 <-- 34 <-- 65 <-- 34 <-- Front Element is: 65