คิวคือโครงสร้างข้อมูลเชิงเส้นที่ลำดับการดำเนินการคือ 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