পাইথনে কিউ – কিউ / Queue ডেটা স্ট্রাকচার

কিউঃ

স্ট্যাকের মত আরেকটা লিনিয়ার ডেটা স্ট্যাকচার হচ্ছে কিউ। কিউ FIFO রুল ফলো করে ডেটা রাখা হয়। FIFO এর পূর্ণরুপ হচ্ছে First In First Out। মানে যে আইটেমটা সবার আগে রাখব, তাই সবার আগে বের করতে হবে। সৎ ডেটা স্ট্র্যাকচার! ঘুষের কারবার নেই! দৈনন্দিন জীবনে প্রায় প্রতিদিনই আমাদের অজান্তেই কিউ ডেটা স্ট্র্যাকচার ব্যবহার করছি। পিজ্জা অর্ডার দিব? কিউতে দাঁড়াও। যে সবার আগে দাঁড়াবে, সেই সবার আগে অর্ডার দিতে পারবে।

কিউ এর ব্যাসিক অপারেশন গুলোঃ

Enqueue: নতুন আরেকটা আইটেম কিউ এর শেষে যুক্ত করা।
Dequeue: কিউ এর প্রথম থেকে একটা আইটেম রিমুভ করা।
IsEmpty: কিউ খালি কিনা, তা চেক করা।
Peek: কিউ এর সামনে বা প্রথমে কোন আইটেম আছে, তা দেখা।
Size: কিউ এর সাইজ বের করা।

পাইথনে কিউ

উপরের ছবিটি দেখি। এখানে সবার প্রথমের কিউতে কোন আইটেম নেই। এরপর আমরা একটা একটা করে মোট তিনটে আইটেম যোগ বা Enqueue করেছি। Dequeue করা মানে হচ্ছে কিউর প্রথম দিক থেকে একটা আইটেম বের করে ফেলা। তো যখন কিউ থেকে কোন আইটেম বের করি, তখন ঐ আইটেমের জায়গা খালি হয়ে যায়। এখানে দেখি, স্ট্যাক থেকে একটি আইটেম Dequeue করার পর প্রথম আইটেমের ইনডেক্স খালি হয়ে গিয়েছে। এখন যদি আমরা নতুন আরেকটা আইটেম পুশ করি, তাহলে কিউ এর শেসে যুক্ত হবে। মানে 8 এর পর।

পাইথনে ইমপ্লিমেন্টেশনঃ

পাইথনে সাধারণত লিস্ট ব্যবহার করে কিউ ইমপ্লিমেন্ট করা যায়। খুব সিম্পল ভাবে যদি লিখি, তাহলে পাইথনে এভাবে কিউ ইমপ্লিমেন্ট করতে পারিঃ

# Initializing a empty queue
queue = []
  
# append() function to enqueue
queue.append(2)
queue.append(4)
queue.append(6)
queue.append(8)

print("Items in the queue: " + str(queue))
  
# pop() function to dequeue
print("Dequeued item: " +str(queue.pop(0)))

print("Queue after dequeue an imte: " + str(queue))

এই প্রোগ্রামটা রান করলে আউটপুট পাবোঃ

Items in the queue: [2, 4, 6, 8]
Dequeued item: 2
Queue after dequeue an imte: [4, 6, 8]

আবার আমরা চাইলে পাইথনে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ব্যবহার করেও ইমপ্লিমেন্ট করতে পারি।

from collections import deque


class Queue:
    def __init__(self):
        self.items = deque()

    # Enqueue method
    def enqueue(self, item):
        self.items.append(item)

    # Dequeue method
    def dequeue(self):
        return self.items.popleft()

    # Peek method
    def peek(self):
        return self.items[0]

    # Method for checking is_empty
    def is_empty(self):
        return len(self.items) == 0

    # Method for getting the size of the queue
    def size(self):
        return len(self.items)

    #  __str__() for using print
    def __str__(self):
        return str(self.items)


queue = Queue()
print(queue)

queue.enqueue(2)
queue.enqueue(4)
queue.enqueue(6)
queue.enqueue(8)

print("Current items in the queue: " + str(queue))
print("size of the queue: ", queue.size())
queue.dequeue()
print("Items in the queue after dequeue: " + str(queue))
print("Front item in the queue:", queue.peek())
print(queue.is_empty())

এই প্রোগ্রামটা রান করলে আউটপুট পাবোঃ

deque([])
Current items in the queue: deque([2, 4, 6, 8])
size of the queue:  4
Items in the queue after dequeue: deque([4, 6, 8])
Front item in the queue: 4
False

প্রশ্ন আসতে পারে আমরা কেউ deque ডেটাটাইপ ব্যবহার করে কিউ ইমপ্লিমেন্ট করেছি যেখানে স্ট্যাক ইমপ্লিমেন্ট করতে সাধারণ লিস্ট ব্যবহার করেছি। এর প্রধান কারণ হচ্ছে লিস্টের শেষে ডেটা যোগ করা বা ডেটা রিমুভ করা সহজ। লিস্টের শুরুর দিক থেকে আইটেম রিমুভ করা স্লো, বেশি কম্পিউটার ইন্সট্রাকশনের দরকার হয়। এই জন্য আমরা deque ডেটাটাইপ ব্যবহার করেছি। আপনি চাইলে লিস্ট ব্যবহার করেও কিউ ইমপ্লিমেন্ট করতে পারেন। নিজে নিজে চেষ্টা করে দেখুন।

Leave a Reply