কম্পিউটার টিউটোরিয়াল

সি++-এ সার্কুলার কিউ: ইনসারশন ও ডিলিশন অপারেশন


কিউ একটি এবস্ট্রাক্ট ডেটা স্ট্রাকচার যা 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

  1. C++-এ fmax() এবং fmin() ফাংশন

  2. C++ STL Set-এ ইনসারশন এবং ডিলিশন: insert(), emplace(), erase()

  3. C++-এ delete() এবং free()

  4. পাইথনে লিস্টের সামনে ও পেছন থেকে এলিমেন্ট ডিলিট করা