एल्गोरिदम और डेटा संरचनाएँ

Queue

Queue कई एल्गोरिथ्म में इस्तेमाल होने वाले मुख्य डेटा स्ट्रक्चर में से एक है। यह असल ज़िंदगी की कतार जैसी ही काम करती है। Queue में सबसे पहले जो तत्व (element) डाला जाता है, वही सबसे पहले “सर्व” होता है और Queue से हट जाता है।

एक काल्पनिक स्थिति की कल्पना कीजिए, जिसमें कॉफी लेने के लिए बहुत सारी चींटियाँ एक पंक्ति में (queue) खड़ी हैं। कतार में सबसे आगे खड़ी चींटी को पहले कॉफी मिलेगी और फिर वह कतार से बाहर चली जाएगी, उसके बाद अगली चींटी को कॉफी मिलेगी और वह भी कतार से बाहर चली जाएगी। यह सिलसिला तब तक चलता रहेगा जब तक कतार पूरी तरह से खाली नहीं हो जाती, यानी कोई चींटी कॉफी के इंतज़ार में न रह जाए।

martin97_A_line_of_ants_waiting_in_a_queue_in_front_of_an_ant_c_63c6770d-0f77-40ba-b91b-582840aae592.png

अधिकांश प्रोग्रामिंग भाषाओं में Queue को डिक्लेयर और इस्तेमाल करना बहुत ही आसान बना दिया गया है, क्योंकि ज़्यादातर जनरल-पर्पस भाषाओं (जैसे Python, C++, Java इत्यादि) में Queue डेटा स्ट्रक्चर पहले से ही उपलब्ध है। फिर भी, हम चाहें तो लिंक्ड लिस्ट का इस्तेमाल करके खुद का Queue भी बना सकते हैं। क्या आप सोच सकते हैं कि यह कैसे किया जा सकता है 🤔?

from queue import Queue

q = Queue()    # Create a new queue
q.put(1)       # Add 1 to the front of the queue
q.put(2)       # Add 2 next
q.put(3)       # Add 3 after 2

# Remove elements from the queue using get()
print(q.get()) # prints 1
print(q.get()) # prints 2
print(q.get()) # prints 3

चुनौती: Queue सिमुलेशन

आप एक ऐसा सिस्टम बना रहे हैं जो स्टोर में आने वाले ग्राहकों का हिसाब रख सके। इस सिस्टम को दो काम करने चाहिए: पहला, किसी ग्राहक को प्रतीक्षा पंक्ति में जोड़ना; और दूसरा, जब ग्राहक का काम पूरा हो जाए, तो प्रतीक्षा पंक्ति में सबसे आगे वाले ग्राहक को हटाना। हर बार जब आप किसी ग्राहक को हटाएँ, आपको उसका नाम प्रिंट करना होगा।

इनपुट

इनपुट की पहली पंक्ति में एक पूर्णांक n (1 ≤ n ≤ 100 000) होता है।

अगली n पंक्तियों में दो तरह के ऑपरेशन हो सकते हैं — या तो add या pop:

  • add ऑपरेशन के बाद एक नाम आता है, जिसके ज़रिये आपको ग्राहक को प्रतीक्षा पंक्ति में जोड़ना चाहिए।

  • pop ऑपरेशन में सिर्फ ऑपरेशन का नाम होता है, और कुछ नहीं।

यह गारंटी है कि pop ऑपरेशन से पहले हमेशा किसी न किसी ग्राहक का इंतज़ार में रहना तय है, इसलिए ये ऑपरेशन मान्य (valid) होंगे।

नामों की लंबाई 20 प्रतीकों से अधिक नहीं होगी।

आउटपुट

हर pop ऑपरेशन के लिए, प्रोग्राम को प्रतीक्षा पंक्ति के सबसे आगे वाले ग्राहक का नाम प्रिंट करना चाहिए।

उदाहरण

इनपुट

आउटपुट

9
add Steven
add Sam
pop
add Sergio
add Don
pop
add John
pop
pop

Steven
Sam
Sergio
Don

4
add John Ford
add Tom Ford
pop
pop

John Ford
Tom Ford

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue