কম্পিউটার সাইন্স/এপ্লিকেশনে এ queue হল ভীষণ গুরুত্বপূর্ণ একটি ডেটা স্ট্রাকচার। আজকে আমরা এই পোস্টে আলোচনা করব array ব্যাবহার করে কিভাবে একটি queue তৈরি করব , queue এর বিভিন্ন অপারেশন ।
Table of Contents
What is Queue in Data-structure
Queue এর বাংলা অর্থ হলো, লাইনের একদম শুরুতে যা থাকবে সেটা লাইন থেকে আগে বের হবে। একদম সহজ বাংলা ভাষায় এটাই Queue সংজ্ঞা।
Queue হলো একটি linear ডেটা স্ট্রাকচার কারণ Queue এ এলিমেন্ট গুলি একটি নির্দিষ্ট sequnce গঠন করে ।
Queue ডেটা স্ট্রাকচার সম্পর্কে আরো বিস্তারিত জানতে এই পোস্টটি ফলো করুন।
যেহেতু Queue তে এলিমেন্ট insertion অপারেশন সবসময় Queue এর শেষেই হয় এবং deletion অপারেশন সবসময় Queue র শুরুতে হয় সেই কারণে Queue ফার্স্ট-ইন-ফার্স্ট-আউট(First In First Out) বা FIFO অর্ডার ফলো করে।
আজকে আমরা দেখব কিভাবে Simple Queue তৈরি করব array ব্যবহার করে।
Also Read :- What is String in Python | Learn in Easy Bengali 2024
Operation associated with queue
queue এর বেসিক অপারেশন গুলি আমরা নীচে আলোচনা করেছি।
- Enqueue – queue এ একটি এলিমেন্টকে insert করা।
- Dequeue – queue থেকে একটি এলিমেন্টকে delete করা।
- Peek – queue এর শুরুর এলিমেন্টকে দেখানো।
- Isempty – এই মেথডটি ব্যবহৃত হয় queue টি খালি কিনা চেক করার জন্য।
- Isfull – এই মেথডটি ব্যবহৃত হয় queue টি ভর্তি কিনা চেক করার জন্য।
Also Read :- What is Tuple in Python in Easy Bengali 2024
Two Important Situations On Queue
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 array
এখন আমরা দেখব , আমরা কিভাবে উপরের অপারেশন গুলির জন্য পাইথনে ফাংশন লিখব এবং সর্বশেষে , তৈরি করা ফাংশন গুলিকে ব্যবহার করে কিভাবে একটি ক্লাস(class) তৈরী করব।
কম্পিউটার মেমরিতে array ব্যবহার করে queue তৈরি করার জন্য , array এর প্রথম এবং সর্বশেষ পজিশন স্টোর করার জন্য আমাদের অতিরিক্ত দুটি ভ্যারিয়েবল তথা , front এবং rear এর সাহায্য নিতে হবে। তাহলে প্রথমেই আমরা myqueue নামে একটা fixed সাইজ array তৈরি করব, পাইথনের array নামক মডিউল ব্যাবহার করে এবং array টির প্রত্যেকটি index এ ভ্যালু হিসাবে 0 দিয়ে ইনিশিয়ালাইজ করে রাখবো এবং সাথে আরও উপরের দুটি ভেরিয়েবল কে -1 দিয়ে ইনিশিয়ালাইজ করে রাখব।
Why we require two variable name front and rear ? ( কেনো আমদের front এবং rear নামক দুটি ভ্যারিয়েবলের প্রয়োজন ? )
front এবং rear দুটি মূলত integer ভ্যারিয়েবল , যার মধ্যে আমরা array পজিশন store করে রাখি Queue এ অপারেশনের জন্য।
front ভেরিয়েবল কে কাজে লাগিয়ে আমরা dequeue অপারেশন করি। rear ভেরিয়েবল কে কাজে লাগিয়ে আমরা enqueue অপারেশন করি।
front এবং rear এর ভ্যালু -1 নির্দেশ করে Queue টি খালি (empty ) এবং front এর ভ্যালু 0 এবং rear এর ভ্যালু ( array সাইজ – 1 ) queue টি পরিপূর্ণ(full) ।
তবে class এর মধ্যে আমাদের “__init_()” মেথডেই উপরের সমস্ত কাজগুলি করতে হবে।
Create a list
Enqueue ( ) operation
Queue এ এলিমেন্ট insert করতে Enqueue ( ) মেথড ব্যাবহার করা হয়।
যেহেতু আমরা একটি এলিমেন্ট insert করব সেই জন্য ফাংশনে আমরা element নামক একটি প্যারামিটার নেব।
Step – 1
চেক করব , যদি ( if condition – i ) rear এর ভ্যালুটি -1 হয় , অর্থাৎ Queue খালি(Empty) তাহলে আমরা front এবং rare দুটি ভেরিয়েবল এ 0 সেট করব।
Step – 2
চেক করব যদি ( if condition – ii ) rear এর ভ্যালুটি ( array সাইজ – 1 ) হয় তাহলে position নামক অতিরিক্ত একটি ভ্যারিয়েবল নেব এবং তাকে 0 দিয়ে ইনিশিয়ালাইজ করব। front থেকে rare + 1 পজিশন পর্যন্ত প্রত্যেকটি ভ্যালুকে array র position index এ swap করবো।
এবং, front কে 0 সেট করব।
rear হিসেবে position নামক ভ্যারিয়েবল এর ভ্যালু সেট করব।
Step – 3
অন্যথায়(else condition ) rear এর ভ্যালু এক বাড়াবো ( +1 ) ।
def enqueue(element): # enqueue method
if(rear==-1):
rear=front=0
elif rear==len(myqueue)-1:
i=0
for index in range(front,rear+1):
myqueue[i]=myqueue[index]
i+=1
front=0
rear=i
else:
rear+=1
myqueue[self.rear]=element
PythonDequeue ( ) operation
Queue থেকে এলিমেন্ট delete করতে Dequeue ( ) মেথড ব্যাবহার করা হয়।
Step – 1
প্রথমে array এর front পজিশনে যে ভ্যালুটি আছে সেটিকে আমরা temp নামক একটি ভ্যারিয়েবল এ স্টোর করব।
Step – 2
যদি(if condition ) front এবং rear পজিশনের ভ্যালু সমান হয় অর্থাৎ queue তে একটাই মাত্র এলিমেন্ট আছে তাহলে আমরা front এবং rear পজিশনের ভ্যালু -1 সেট করবো।
Step – 3
অন্যথায়(else condition ) front এর ভ্যালু এক বাড়াবো ( +1 ) ।
Step – 4
temp এর ভ্যালুটিকে return করব।
def dequeue(): # dequeue method
temp=myqueue[front]
if front==rear:
front=rear=-1
else:
front+=1
return temp
PythonPeek ( ) operation
একটি Queue এর শুরুর এলিমেন্টকে দেখানোর জন্যে peek ( ) মেথড ব্যাবহার করা হয়। array এর front পজিশনের ভ্যালুটিকে return করব, return স্টেটমেন্ট ব্যবহার করে।
def peek(): # peek method
return myqueue[front]
Pythonisempty( ) method
এই মেথডটি ব্যবহৃত হয় Queue টি খালি কিনা চেক করার জন্য।
যদি rear এর ভ্যালু -1 হয় অথবা rear এবং front এর ভ্যালু – 1 হয় অথবা rear or front এর ভ্যালু – 1 হয় তাহলে queue টি খালি (empty) ।
def is_empty(): # isempty method
return front==-1 and rear==-1
Pythonisfull( ) method
এই মেথডটি ব্যবহৃত হয় Queue টি ভর্তি কিনা চেক করার জন্য।
যদি front এর ভ্যালু 0 এবং rear এর ভ্যালু ( array সাইজ – 1 ) হয় তাহলে queue টি ভর্তি(full) ।
def is_full(): # isempty method
return front==0 and rear==len(myqueue)-1
PythonImplementing a Queue Data Structure Using Arrays With Python Classes
এখন আমরা দেখব কিভাবে Queue নামের একটি class তৈরি করে ওপরের ফাংশন গুলির কিছু sytax পরিবর্তন করে আমরা একটি Queue তৈরি করতে পারি।
প্রথমে আমরা ,আমাদের কম্পিউটারে data structure বা অন্য যে কোনো নামে একটা ফোল্ডার তৈরি করব। সেই ফোল্ডারে queue.py নামে একটা পাইথন ফাইল তৈরি করব।
এরপর সেখানে আমরা নিম্নলিখিত কোডটিকে paste করব।
from array import array
class Queue:
def __init__(self,size): # here __init__() is a special method called constructor.
self.myqueue=array('i',size*[0])
self.front=self.rear=-1
# here, self is a keyword refers to the instance of the class
def enqueue(self,element): # enqueue method
if(self.rear==-1):
self.rear=self.front=0
elif self.rear==len(self.myqueue)-1:
i=0
for index in range(self.front,self.rear+1):
self.myqueue[i]=self.myqueue[index]
i+=1
self.front=0
self.rear=i
else:
self.rear+=1
self.myqueue[self.rear]=element
def dequeue(self): # dequeue method
temp=self.myqueue[self.front]
if self.front==self.rear:
self.front=self.rear=-1
else:
self.front+=1
return temp
def peek(self): # peek method
return self.myqueue[self.front]
def is_empty(self): # isempty method
return self.front==-1 and self.rear==-1
def is_full(self): # isempty method
return self.front==0 and self.rear==len(self.myqueue)-1
def display(self): # display method
print()
for i in range(self.front,self.rear+1):
print(' |',format(self.myqueue[i],'>3'),'|',end=" ")
#print(' -------')
Pythonএখানে আমরা display নামক একটি অতিরিক্ত মেথড ব্যবহার করেছি যেটির কাজ হল Queue এর এলিমেন্ট গুলিকে ডিসপ্লে করানো।
এবার আমরা আমাদের বানানো queue.py মডিউলটিকে আমাদের অন্য আরেকটি ফাইলে import করব। এবং একটি menu-driven প্রোগ্রাম লিখে Queue এর ব্যাবহার দেখব।
from queue_array import Queue
queue_size=int(input("Enter the Queue Size : "))
my_queue =Queue(queue_size)
while True:
print("\nQueue Implementation using Array")
print("1. Enqueue")
print("2. Dequeue")
print("3. Peek")
print("4. Display")
print("5. Exit")
choice = int(input("Enter your choice: "))
match choice:
case 1:
if my_queue.is_full():
print("Queue is Overflow.")
else:
element = int(input("Enter element to push: "))
my_queue.enqueue(element)
case 2:
if my_queue.is_empty():
print("Queue Underflow")
else:
popped = my_queue.dequeue()
print("Popped element:", popped)
case 3:
if my_queue.is_empty():
print("Queue Underflow")
else:
top_element = my_queue.peek()
print("Top 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
Enter the Queue Size : 3
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to push: 1
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to push: 2
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to push: 3
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 1
Queue is Overflow.
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 4
| 1 | | 2 | | 3 |
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 3
Top element: 1
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 2
Popped element: 1
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 2
Popped element: 2
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 4
| 3 |
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to push: 5
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to push: 6
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 4
| 3 | | 5 | | 6 |
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 1
Queue is Overflow.
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 2
Popped element: 3
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 2
Popped element: 5
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 2
Popped element: 6
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 2
Queue Underflow
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 4
Queue Underflow
Queue Implementation using Array
1. Enqueue
2. Dequeue
3. Peek
4. Display
5. Exit
Enter your choice: 5
Exiting the program...
Also Read :- What are Data Structures in Python in Easy Bengali 2024
এই পোস্টটি পড়ে আপনাদের মূলবান মতামত জানাতে আমাদের কমেন্ট করুন। আপনাদের কোনো প্রশ্ন থাকলে নির্দ্ধিধায় জিজ্ঞেসা করুন। আমরা চেষ্টা করবো যতো দ্রুত সম্ভব উত্তর দেবার।
ধন্যবাদ!!