কিউ একটি এবস্ট্রাক্ট ডেটা স্ট্রাকচার যা FIFO (First In First Out) নীতি মেনে চলে। লিনিয়ার কিউতে অ্যারে ব্যবহার করলে কিছু সমস্যা হয় — ইনসারশন/ডিলিশনের পর ফ্রন্ট ও রিয়ার পজিশন পরিবর্তন হয়ে যেতে পারে, ফলে খালি স্পেস থাকা সত্ত্বেও ইনসার্ট করা যায় না। এই সমস্যা সমাধান করতে সার্কুলার কিউ ব্যবহার করা হয়, যেখানে লাস্ট পজিশন ফার্স্ট পজিশনের সাথে সংযুক্ত থাকে।
এলগরিদম
insert(queue, key)
begin
if front = 0 and rear = n-1, or front = rear+1 → queue full, return
else if front = -1 → front = 0, rear = 0
else if rear = n-1 → rear = 0 else rear = rear+1
queue[rear] = key
end
delete(queue)
begin
if front = -1 → queue empty, return
item = queue[front]
if front = rear → front = rear = -1
else if front = n-1 → front = 0 else front = front+1
end
উদাহরণ কোড
#include <iostream>
using namespace std;
int cqueue[5];
int front = -1, rear = -1, n = 5;
void insertCQ(int val){
if ((front == 0 && rear == n-1) || (front == rear+1)){
cout << "Queue Overflow\n"; return;
}
if (front == -1){ front = 0; rear = 0; }
else { if (rear == n-1) rear = 0; else rear++; }
cqueue[rear] = val;
}
void deleteCQ(){
if (front == -1){ cout << "Queue Underflow\n"; return; }
cout << "Deleted: " << cqueue[front] << endl;
if (front == rear){ front = -1; rear = -1; }
else { if (front == n-1) front = 0; else front++; }
}
void displayCQ(){
int f = front, r = rear;
if (front == -1){ cout << "Queue empty\n"; return; }
cout << "Queue elements: ";
if (f <= r){
while (f <= r) cout << cqueue[f++] << " ";
} else {
while (f <= n-1) cout << cqueue[f++] << " ";
f = 0;
while (f <= r) cout << cqueue[f++] << " ";
}
cout << endl;
}
int main(){
int ch, val;
do {
cout << "1)Insert 2)Delete 3)Display 4)Exit\nEnter choice: ";
cin >> ch;
switch(ch){
case 1: cout << "Value: "; cin >> val; insertCQ(val); break;
case 2: deleteCQ(); break;
case 3: displayCQ(); break;
case 4: cout << "Exit\n"; break;
default: cout << "Invalid!\n";
}
} while(ch != 4);
return 0;
}
আউটপুট (নমুনা)
1)Insert 2)Delete 3)Display 4)Exit Enter choice: 1 Input for insertion: 10 ... Queue elements are: 10 20 30 40 50 Element deleted: 10 Element deleted: 20 Queue elements: 30 40 50 Exit