কম্পিউটার সাইন্স/এপ্লিকেশনে এ queue হল ভীষণ গুরুত্বপূর্ণ একটি ডেটা স্ট্রাকচার। আজকে আমরা এই পোস্টে আলোচনা করব কিভাবে একটি queue ডেটা স্ট্রাকচার তৈরি করব , queue এর বিভিন্ন অপারেশন এবং queue এর ব্যবহার দেখব।
Table of Contents
What is Queue Data-structure In Python?
Queue এর বাংলা অর্থ হলো, লাইনের একদম শুরুতে যা থাকবে সেটা লাইন থেকে আগে বের হবে। একদম সহজ বাংলা ভাষায় এটাই Queue সংজ্ঞা।
এবার আমরা জানতে চেষ্টা করব প্রোগ্রামিং এ কিউ এর প্রয়োজনীয়তা কি ?
একটু কল্পনা করুন আপনি Bombay Stock Exchange ( BSE ) এ TCS ( Tata Consultant Services) কোম্পানির শেয়ারের দাম দেখতে চাইছেন। আমরা সবাই জানি শেয়ারের দাম প্রত্যেক মিনিটে পরিবর্তন হয়। তাহলে BSE এর ইঞ্জিনিয়ার প্রত্যেক মিনিটে বর্তমান স্টক প্রাইস JSON ফরম্যাটে সার্ভারে আপলোড করবে এবং আপনি অথবা অন্য user সেখান থেকে ডেটা Read করে রিয়েল টাইমে স্টক প্রাইস দেখতে পারবেন।
কিন্তু সমস্যা হচ্ছে যে কোন স্টকের প্রাইস রিয়েল টাইমে উঠানামা করে আর যদি সার্ভারে Power Supply এ কোন সমস্যার সৃষ্টি হয় সেক্ষেত্রে বর্তমান ডেটা পাওয়া যাবে না। তাহলে এই সমস্যা থেকে বের হবার উপায় কি ?
এখানেই queue ডেটা স্ট্রাকচারের কাজ আমরা আগেই আলোচনা করেছি , যে জিনিস শুরুতে থাকবে সেটা সবার আগে বের হবে। তাহলে যদি BSE এর ইঞ্জিনিয়াররা যদি একটি QUEUE SERVER বানিয়ে রাখে এবং সেখানে প্রত্যেক মিনিটের স্টকের প্রাইস শুধু Insert করে আর কোন user এর যখন স্টক প্রাইস জানার প্রয়োজন হবে তখন Delete অপারেশনের মাধ্যমে বর্তমান স্টকের প্রাইস পেয়ে যাবে। এবং প্রত্যেকটি ইউজার বিভিন্ন টাইমে বিভিন্ন স্টক প্রাইস দেখতে পাবে।Queue দিয়ে শুধু শেয়ার মার্কেট না এমন আরো অনেক প্রবলেম সলভ করা যায়।
Queue হলো একটি linear ডেটা স্ট্রাকচার কারণ Queue এ এলিমেন্ট গুলি একটি নির্দিষ্ট sequence গঠন করে ।
Queue একটি dynamic বা non-static ডেটা স্ট্রাকচার কারণ Queue এ কতগুলি এলিমেন্ট থাকবে সেটা আগে থেকেই fixed না করে আমরা আমাদের প্রয়োজনমতো এলিমেন্ট কে insert অথবা delete করতে পারি।
যদিও আমরা কোন ডেটা স্ট্রাকচার ব্যবহার করে Queue টি তৈরি করব সেটার উপরে depend করে Queue টি dynamic বা non-static কিনা। যদি আমরা array ব্যবহার করে Queue তৈরি করি তাহলে Queue টি static ডেটা স্ট্রাকচার কারণ array এর সাইজ fixed। কিন্তু যদি আমরা list ব্যবহার করে পাইথনে Queue তৈরি করি তাহলে এটি non-static ডেটা স্ট্রাকচার কারণ পাইথনে list এর সাইজ fixed হয় না।
যেহেতু Queue তে এলিমেন্ট insertion অপারেশন সবসময় Queue এর শেষেই হয় এবং deletion অপারেশন সবসময় Queue র শুরুতে হয় সেই কারণে Queue ফার্স্ট-ইন-ফার্স্ট-আউট(First In First Out) বা FIFO অর্ডার ফলো করে।
Example of Queue Data-structure In Python
- Round Robin algorithm scheduling of CPU scheduling.
- Batch processing
- Message buffering
Types of Queue Data-structure In Python
- Simple Queue
- Circular Queue
- Priority Queue
- DEQUE (Double Ended Queue)
Operation associated with Queue Data-structure In Python
queue এর বেসিক অপারেশন গুলি আমরা নীচে আলোচনা করেছি।
- Enqueue – queue এ একটি এলিমেন্টকে insert করা।
- Dequeue – queue থেকে একটি এলিমেন্টকে delete করা।
- Peek – queue এর শুরুর এলিমেন্টকে দেখানো।
- Isempty – এই মেথডটি ব্যবহৃত হয় queue টি খালি কিনা চেক করার জন্য।
- Isfull – এই মেথডটি ব্যবহৃত হয় queue টি ভর্তি কিনা চেক করার জন্য।
Two Important Situations On Queue Data-structure In Python
Queue Overflow
যখন আমরা কোন এলিমেন্টকে queue এ enqueue করব তখন আমাদের অবশ্যই চেক করা প্রয়োজন queue টি ভর্তি(full ) কিনা। যদি queue টি সম্পূর্ণরূপে ভর্তি হয়, তখন আমরা নতুন কোন এলিমেন্টকে queue এ enqueue করতে পারব না। এই সিচুয়েশনটিকেই বলা হয় Queue Overflow।
তবে এটি fixed সাইজ Queue এর ক্ষেত্রেই প্রযোজ্য।
Queue Underflow
যখন আমরা কোন এলিমেন্টকে queue থেকে peek বা dequeue করব তখন আমাদের অবশ্যই চেক করা প্রয়োজন queue টি খালি(empty ) কিনা। যদি queue টি সম্পূর্ণরূপে খালি(empty ) হয়, তখন আমরা কোন এলিমেন্টকে queue থেকে peek বা dequeue করতে পারব না। এই খালি(empty ) সিচুয়েশনটিকেই বলা হয় Queue Underflow।
Queue representation using list in Python
এখন আমরা দেখব , আমরা কিভাবে উপরের অপারেশন গুলির জন্য পাইথনে ফাংশন লিখব এবং সর্বশেষে , তৈরি করা ফাংশন গুলিকে ব্যবহার করে কিভাবে একটি ক্লাস(class) তৈরী করব।
সবার আগে আমরা myqueue নামে একটা লিস্ট তৈরি করব , তবে class এর মধ্যে আমাদের “init_()__” মেথডেই লিস্টটিকে তৈরী করতে হবে।
Create a list
class ব্যবহার না করে।
myqueue=[]
Pythonclass ব্যবহার করে।
class stack:
def __init__(self):
self.myqueue=[]
PythonEnqueue ( ) operation
Queue এ এলিমেন্ট insert করতে Enqueue ( ) মেথড ব্যাবহার করা হয়।
যেহেতু আমরা একটি এলিমেন্ট insert করব সেই জন্য ফাংশনে আমরা element নামক একটি প্যারামিটার নেব। এবং element টিকে লিস্টে append করব।
def enqueue(value):
myqueue.append(value)
PythonDequeue ( ) operation
Queue থেকে এলিমেন্ট delete করতে Dequeue ( ) মেথড ব্যাবহার করা হয়।
আমরা element টিকে লিস্ট থেকে 0 নম্বর ইনডেক্স পজিশনের ভ্যালুটিকে pop ( ) করব এবং return স্টেটমেন্ট ব্যবহার করে এলিমেন্ট টিকে রিটার্ন করব।
def dequeue():
return myqueue.pop(0)
PythonPeek ( ) operation
একটি Queue এর শুরুর এলিমেন্টকে দেখানোর জন্যে peek ( ) মেথড ব্যাবহার করা হয়।
আমরা লিস্টের 0 নং index ব্যাবহার করে এলিমেন্ট টিকে রিটার্ন করব, return স্টেটমেন্ট ব্যবহার করে।
def peek():
return myqueue[0]
Pythonisempty
এই মেথডটি ব্যবহৃত হয় Queue টি খালি কিনা চেক করার জন্য।
একটি লিস্ট খালি কিনা এটি আমরা পাইথনে দুভাবে চেক করতে পারি। প্রথমত list টির সাইজ যদি 0 হয় তাহলে list টি খালি। অথবা যদি list টি একটি empty লিস্ট ( [ ] )এর সমান হয়।
ওপরের দুটি মেথডের মধ্যে যেকোনো একটি মেথড ব্যবহার করে True রিটার্ন করব যদি list টি খালি হয় অন্যথায় False রিটার্ন করব।
def isempty():
return myqueue==[]
Pythonisfull
এই মেথডটি ব্যবহৃত হয় Queue টি ভর্তি কিনা চেক করার জন্য।
যেহেতু পাইথনে লিস্টের কোন fixed সাইজ হয় না সেই কারণেই এই isfull () ফাংশনটির আমাদের প্রয়োজন নেই।
Implementing a Queue Data-structure In Python Using List With Classes
এখন আমরা দেখব কিভাবে Queue নামের একটি class তৈরি করে ওপরের ফাংশন গুলির কিছু syntax পরিবর্তন করে আমরা একটি Queue তৈরি করতে পারি।প্রথমে আমরা ,আমাদের কম্পিউটারে data structure বা অন্য যে কোনো নামে একটা ফোল্ডার তৈরি করব। সেই ফোল্ডারে queue.py নামে একটা পাইথন ফাইল তৈরি করব।
এরপর সেখানে আমরা নিম্নলিখিত কোডটিকে paste করব।
class Queue:
def __init__(self): # here __init__() is a special method called constructor.
self.myqueue=[] # create an empty list called myqueue
# here, self is a keyword refers to the instance of the class
def enqueue(self,element): # enqueue method
self.myqueue.append(element)
def dequeue(self): # dequeue method
return self.myqueue.pop(0)
def peek(self): # peek method
return self.myqueue[0]
def is_empty(self): # isempty method
return self.myqueue==[]
def display(self): # display method
print()
for i in range(len(self.myqueue)):
print(' |',format(self.myqueue[i],'>3'),'|',end=" ")
#print(' -------')
Pythonএখানে আমরা display নামক একটি অতিরিক্ত মেথড ব্যবহার করেছি যেটির কাজ হল Queue এর এলিমেন্ট গুলিকে ডিসপ্লে করানো।
এবার আমরা আমাদের বানানো queue.py মডিউলটিকে আমাদের অন্য আরেকটি ফাইলে import করব। এবং একটি menu-driven প্রোগ্রাম লিখে Queue এর ব্যাবহার দেখব।
# syntax of import statement: from file_name import function / class / variable
from queue import Queue
my_queue =Queue()
while True:
print("\nQueue Implementation\n1. Enqueue")
print("2. Dequeue")
print("3. Peek")
print("4. Display")
print("5. Exit")
choice = int(input("Enter your choice: "))
match choice:
case 1:
element = int(input("Enter element to Enqueue: "))
my_queue.enqueue(element)
case 2:
if my_queue.is_empty():
print("Queue Underflow")
else:
popped = my_queue.dequeue()
print("Dequeue element:", popped)
case 3:
if my_queue.is_empty():
print("Queue Underflow")
else:
top_element = my_queue.peek()
print("First element:", top_element)
case 4:
if my_queue.is_empty():
print("Queue Underflow")
else:
my_queue.display()
case 5:
print("Exiting the program...")
exit()
case _:
print("Invalid choice. Please enter a valid option.")
PythonOutput
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to Enqueue: 1
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to Enqueue: 2
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to Enqueue: 3
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 4
| 1 | | 2 | | 3 |
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 2
Dequeue element: 1
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 4
| 2 | | 3 |
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 2
Dequeue element: 2
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 4
| 3 |
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 3
First element: 3
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 2
Dequeue element: 3
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 4
Queue Underflow
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 2
Queue Underflow
Queue Implementation
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 5
Exiting the program...
এই পোস্টটি পড়ে আপনাদের মূলবান মতামত জানাতে আমাদের কমেন্ট করুন। আপনাদের কোনো প্রশ্ন থাকলে নির্দ্ধিধায় জিজ্ঞেসা করুন। আমরা চেষ্টা করবো যতো দ্রুত সম্ভব উত্তর দেবার।
ধন্যবাদ!!