ডাটা স্ট্রাকচার: কিউ(Queue)

 স্ট্যাকের পরেই ডাটা স্ট্রাকচারের যেই বিষয়টি সামনে চলে আসে সেটি হলো Queue। স্ট্যাকে আমরা দেখলাম যাকে সবার পরে রাখা হয় তাকে সবার আগে কাজে লাগানো হয়। কিন্তু যে বেচারাকে আমরা সবার আগে রাখলাম তাকেই যদি কখনো সবার আগে কাজে লাগাতে চাই, তাহলে?
হ্যা, এটাই হচ্ছে Queue। আমাদের বাস্তব জীবনে আমরা অনেক জায়গায়ই Queue দেখতে পাই। ‘আগে আসলে আগে পাবেন’ ভিত্তিতে বাসের লাইন, লিফটের লাইন, রিলিফের ত্রাণ বিতরণের লাইনই হোক কিংবা বিশ্বকাপ ক্রিকেটের টিকিট বিক্রির দীর্ঘতম লাইনই হোক, সবটাই একেকটা  Queue।

6a00d83451be8f69e2016306b539c6970d-800wi

এখানে যে সবার আগে আসবে, তাকেই সবার আগে সুযোগ দেয়া হবে। এটার সুন্দর নাম হলো- “First In First Out(FIFO)”।
Queue এর প্রাথমিক কথাবার্তা এতটুকুই। Queue তে আমরা যখন কোনো ডাটা রাখবো সেটাকে বলে Enqueue, আর ডাটা যখন তুলে নেবো সেটাকে বলে Dequeue। Wikipedia তে Queue এর একটা সুন্দর ছবি দেয়া আছে। এরকম-

300px-Data_Queue.svg
তারমানে আমরা Enqueue করে ডাটা রাখতে থাকবো Back এ, আর এই জমা হতে থাকা ডাটা থেকে Dequeue করবো Front এ। তারমানে যাকে সবার আগে রাখবো তাকেই সবার আগে প্রসেস করবো।
এখন আমরা যদি Array দিয়ে Queue এর কোড করতে চাই, তাহলে স্ট্যাকের মতই Enqueue (stack এর push) আর Dequeue(Stack এর pop) এর জন্য দুইটা ফাংশন লিখতে হবে।
তারআগে-

#include<stdio.h>
#define sz 100   

int arr[sz],last=0;

এখানে sz হচ্ছে এ্যারের সাইজ আর last হচ্ছে শেষ যেই পজিশন পর্যন্ত ডাটা রাখা হয়েছে।
এখন আমাদের Enqueue ফাংশনটা হবে এরকম-

void Enqueue(int val)
{
    if(last>=sz)
        printf("No more space on Queue.\n");
    else
        arr[last++]=val;
}

এটা স্ট্যাকের push এর মতই।
আর আমাদের Dequeue ফাংশনটা হবে-

void Dequeue()
{
    if(last<=0)
    {
        printf("Queue is empty\n");
    }
    else
    {
        printf("Removed element: %d\n",arr[0]);
        for(int i=1;i<;last;i++) //Shift all value to left
            arr[i-1]=arr[i];
        last--;
    }
}

এখানে Dequeue তে একটা লক্ষ্যণীয় বিষয় হলো, আমরা যখন প্রথম থেকে একটা ডাটা সরিয়ে নিচ্ছি তখন যেহেতু Queue এর সাইজ এক কমে যায়, তখন দ্বিতীয় ভ্যালুটা সামনে চলে আসবে এবং পরেরবার Dequeue করার সময় সেটাই প্রসেস হবে। এ্যারেতে Queue কোড করতে গেলে তাই একটা ডাটা সরিয়ে নেয়ার পর, পরের ভ্যালুগুলোকে এক ঘর বামে শিফট করতে হয়। কিন্তু আমরা যদি লিংকড লিস্ট দিয়ে Queue implement করি তখন আর এ সমস্যা থাকে না।
নীচের ছবিটা দেখলে আশা করি Queue বুঝতে আরো একটু সুবিধা হবে-

1-tile
Queue এর কথা বার্তা মোটামুটি এখানেই শেষ, আর Queue এর পুরো কোড এখানে
আর কেউ যদি লিংকড লিস্ট দিয়ে করতে চায় তাহলে, এখানে
স্ট্যাক আর কিউ হচ্ছে ডাটা স্ট্রাকচারের সবচাইতে গুরুত্বপূর্ণ এবং প্রাথমিক দুইটা বিষয়। সুতরাং দেরি না করে শিখে ফেলা উচিত।

তো চলতে থাকুক কোডিং, আর বুঝতে যে কোনো প্রবলেম হলেই “Feel free to Ask”.

Coding is fun……………………… 🙂

Want to like or share?:
0

1 comment

  1. খুব ভালো লাগলো , Queue এর ব্যাবহার সম্পর্কে একটু বলবেন

Leave a Reply

Your email address will not be published. Required fields are marked *