क्यू एक लीनियर डेटा स्ट्रक्चर है जो फर्स्ट इन फर्स्ट आउट मैकेनिज्म (FIFO) पर काम करता है।
जो एलिमेंट क्यू में पहले प्रवेश करता है वह प्रोसेस होने वाला पहला होता है।
उदाहरण
क्यू डेटा स्ट्रक्चर को बस स्टैंड पर कतार के उदाहरण से समझा जा सकता है। जो व्यक्ति बस स्टैंड पर पहले पहुंचता है वह कतार में पहला व्यक्ति होता है और अन्य व्यक्ति उसके पीछे खड़े होते हैं जैसे-जैसे वे बस स्टैंड पर पहुंचते हैं। जब बस आती है, तो जो व्यक्ति बस स्टैंड पर पहले पहुंचा था वह बस में प्रवेश करने वाला पहला व्यक्ति होगा और बाकी उस क्रम में प्रवेश करेंगे जिस क्रम में वे बस स्टैंड पर पहुंचे थे। इस प्रकार, फर्स्ट इन फर्स्ट आउट मैकेनिज्म का पालन किया जाता है।
पायथन में क्यू का कार्यान्वयन
पायथन में क्यू को अन्य लीनियर डेटा स्ट्रक्चर्स या पायथन लाइब्रेरी में इनबिल्ट मॉड्यूल्स का उपयोग करके विभिन्न तरीकों से इम्प्लीमेंट किया जा सकता है।
मेथड 1 - लिस्ट का उपयोग करके इम्प्लीमेंट करें
पायथन में क्यू को लिस्ट का उपयोग करके इम्प्लीमेंट किया जा सकता है। यह बहुत कुशल नहीं है क्योंकि लिस्ट की शुरुआत में एलिमेंट डालने या हटाने में O(n) समय लगता है जो अन्य तरीकों का उपयोग करके इम्प्लीमेंटेशन की तुलना में धीमा है।
शामिल ऑपरेशन्स
append() - यह फंक्शन क्यू के अंत में एक एलिमेंट जोड़ता है।
pop(0) - यह फंक्शन क्यू में पहले एलिमेंट को हटाता है और वापस करता है।
उदाहरण
queue = []
queue.append(1)
queue.append(2)
queue.append(3)
print("Initial queue", queue)
print("Element popped from the queue")
print(queue.pop(0))
print(queue.pop(0))
print("Queue after popping some elements", queue)
आउटपुट
Initial queue [1, 2, 3]
Element popped from the queue
1
2
Queue after popping some elements [3]
एक बार क्यू खाली हो जाने पर आप अधिक एलिमेंट्स नहीं हटा सकते। ऐसा करने पर एक्सेप्शन होता है।
queue.pop(0)
IndexError: pop from empty list
मेथड 2 - queue.Queue का उपयोग करके इम्प्लीमेंट करें
यह पायथन से इनबिल्ट मॉड्यूल का उपयोग करके क्यू इम्प्लीमेंट करने का तरीका है। हमें queue से Queue इम्पोर्ट करने की आवश्यकता है। हम क्यू को कुछ विशिष्ट आकार के साथ इनिशियलाइज़ कर सकते हैं। शून्य आकार का अर्थ अनंत क्यू है।
शामिल ऑपरेशन्स
maxsize - क्यू में अनुमत एलिमेंट्स की अधिकतम संख्या
get() - क्यू से पहले एलिमेंट को हटाता है और वापस करता है। यदि क्यू खाली है, तो तब तक प्रतीक्षा करें जब तक क्यू में कम से कम एक एलिमेंट न हो।
get_nowait() - क्यू से पहले एलिमेंट को हटाता है और वापस करता है। यदि क्यू खाली है, तो एक्सेप्शन उठाएं।
put(item) - क्यू के अंत में एक एलिमेंट जोड़ता है। यदि क्यू भरा हुआ है, तो तब तक प्रतीक्षा करें जब तक फ्री स्लॉट उपलब्ध न हो।
put_nowait(item) - क्यू के अंत में एक एलिमेंट जोड़ता है। यदि क्यू भरा हुआ है, तो एक्सेप्शन उठाएं।
full() - यदि क्यू भरा हुआ है तो True वापस करता है, अन्यथा False।
empty() - यदि क्यू खाली है तो True वापस करता है, अन्यथा False।
qsize() - क्यू में मौजूद एलिमेंट्स की संख्या वापस करता है।
उदाहरण
from queue import Queue
q = Queue(maxsize=3)
q.put(1)
q.put(2)
q.put(3)
print("Is queue full", q.full())
print("Element popped from the queue")
print(q.get())
print(q.get())
print("Number of elements in queue", q.qsize())
print("Is queue empty", q.empty())
आउटपुट
Is queue full True
Element popped from the queue
1
2
Number of elements in queue 1
Is queue empty False
मेथड 3 - collections.deque का उपयोग करके इम्प्लीमेंट करें
यह पायथन में क्यू इम्प्लीमेंट करने का एक और तरीका है। हमें collections मॉड्यूल से deque इम्पोर्ट करने की आवश्यकता है।
शामिल ऑपरेशन्स
append() - यह फंक्शन क्यू के अंत में एक एलिमेंट जोड़ता है।
popleft() - यह फंक्शन O(1) टाइम कॉम्प्लेक्सिटी में क्यू में पहले एलिमेंट को हटाता है और वापस करता है।
उदाहरण
from collections import deque
queue = deque()
queue.append(1)
queue.append(2)
queue.append(3)
print("Initial queue:", queue)
print("Element popped from the queue")
print(queue.popleft())
print(queue.popleft())
print("Queue after popping some elements:", queue)
आउटपुट
Initial queue: deque([1, 2, 3])
Element popped from the queue
1
2
Queue after popping some elements: deque([3])
खाली deque पर popleft() फंक्शन का उपयोग करने पर एक्सेप्शन उठेगा।