Sunday, August 21, 2016

ডাটা স্ট্রাকচার - ৬ঃ কিউ

Queue অন্যন্য ডাটা স্ট্রাকচারের মতই একটি ডাটা স্ট্রাকচার। আমরা আদের দৈনন্দিন জীবনে এটা প্রায়ই লক্ষ করি। যেমন,  বিদ্যুত বিল দিতে গেলে লাইনে দাঁড়িয়ে দিতে হয় সেটা একটা কিউডিজিটাল ওয়ার্ল্ডে গেলে লাইনে দাঁড়িয়ে ঢুকতে হয়; ব্যাংক থেকে টাকা তুলতে গেলে কিম্বা টাকা জমা দিতে গেলে সেখানেও লাইনে দাড়াতে হয় আবার ঢাকা শহরে পুটপাতেও মাঝে মাঝে হাটতে গেলে কিউ তৈরি হয়!  মানে আমাদের প্রচলিত জীবন ব্যাবস্থার সর্বক্ষেত্রে রয়েছে কিউ এর ব্যাবহার! 
চিত্রঃ কিউ
প্রোগ্রামিং এ কিউ পদ্ধতিতেও ডেটা রাখা যায়। এ পদ্ধতিতে ডেটা রাখলে আগে আসলে আগে পাবেন ভিত্তিতে আমরা যেকোন ডেটা তুলে নিয়ে আসতে পারি। এজন্য একে কিউ বলা হয়। আমরা এখানে কিউ পদ্ধতিতে ডেটা রাখবো। ডেটা স্টোরেজ হিসেবে ব্যাবহার করবো অ্যারে।  এখন আমরা সি দিয়ে কিউ ইমপ্লিমেন্ট করার চেষ্টা করবো- 

মুল কনসেপ্টঃ আমরা জানি যেকোন কিউ এর ই সামনে এবং পেছন দুইটা পার্ট থাকে। কিউ এর পেছন থেকে দিক থেকে প্রবেশ করে এবং সামনের দিক থেকে কিউ থেকে বের হয়ে যায়। আমরা অ্যারেতে ডেটা রাখার সময় একইসাথে অ্যারের সামনে এবং পেছনের ইন্ডেক্সটা ট্রেস করে রাখবো। পেছনের ইন্ডেক্সটা ব্যাবহার করবো ডেটা প্রবেশ করানোর জন্য আর সামনের ইন্ডেক্স ব্যাবহার করবো বের করে নেওয়ার জন্য, ঠিক বাস্তব জীবনের কিউ যেভাবে কাজ করে। নীচের চিত্রে খেয়াল করো-  


চিত্রে দেখা যাচ্ছে সবার আগে 37 ইনপুট দেওয়া হল এবং সেটা সবার আগে রিমোভ হয়ে যাচ্ছে। ডেটা প্রবেশ করানোকে কিউ এর ভাষায় বলা হয় enqueue আর ডেটা বের করে আনাকে কিউ এর ভাষায় বলা হয় dequeue. 

Algorithm: 
 Enqueue Algorithm:  
 1. Create queue[MAX] and Set rear and front to -1 as there is nothing in the queue   
 2. enqueue data and increase front by 1   
 3. increase rear by 1   
 4. Continue 2 until queue is not full.   

 Dequeue Algorithm:   
 1. return queue[front]   
 2. decrease front by 1   
 3. continue 1 and 2 until queue is not empty   

Pseudocode:
 int enqueue(int data)  
 {  
   if (rear == MAX - 1)  
   {  
     printf("Queue is Full \n");  
     return;  
   }  
   if (rear == - 1)  
     front = 0;  
   rear = rear+1;  
   queue[rear] = data;  
 }  

 int dequeue()  
 {  
   if(front> rear)  
   {  
     printf("Queue is empty\n");  
     return 0;  
   }  
   return queue[front++];  
 }  

No comments:

Post a Comment