BCA / B.Tech 16 min read

Queue in Hindi

Queue in Data Structure in Hindi | डेटा संरचना में  क्यू  हिंदी में : 


क्यू (Queue) एक महत्वपूर्ण डेटा संरचना है, जो FIFO (First In, First Out) सिद्धांत पर आधारित है। इसका मतलब है कि जो तत्व सबसे पहले क्यू में डाला जाता है, वही सबसे पहले निकाला जाता है। इसे सामान्य जीवन के एक कतार (queue) के रूप में समझा जा सकता है, जैसे किसी दुकान पर लगी लोगों की लाइन जहाँ जो व्यक्ति सबसे पहले लाइन में खड़ा होता है, उसे सबसे पहले सेवा मिलती है।

क्यू (Queue) एक ऐसा डेटा स्ट्रक्चर है, जिसमें तत्वों को एक छोर से डाला जाता है जिसे पीछे (rear) कहते हैं, और उन्हें दूसरे छोर से निकाला जाता है जिसे सामने (front) कहते हैं। इसका उपयोग उन स्थानों पर किया जाता है, जहाँ संसाधनों का अनुक्रमिक (sequential) या क्रमवार उपयोग होता है, जैसे कि प्रिंटर, सीपीयू प्रक्रिया शेड्यूलिंग आदि।

क्यू एक महत्वपूर्ण डेटा संरचना है, जिसका उपयोग विभिन्न कंप्यूटर विज्ञान और इंजीनियरिंग समस्याओं को हल करने के लिए किया जाता है। इसके विभिन्न प्रकार, जैसे साधारण क्यू, वृत्ताकार क्यू, प्राथमिकता क्यू, और डबल-एंडेड क्यू, विभिन्न परिस्थितियों में कुशलता से काम करने के लिए डिज़ाइन किए गए हैं।



Queue in Hindi



क्यू के मुख्य ऑपरेशन्स

क्यू में निम्नलिखित ऑपरेशन्स होते हैं:

  • एनक्यू (Enqueue): क्यू के पीछे (rear) तत्व को जोड़ना।
  • डिक्यू (Dequeue): क्यू के सामने (front) से तत्व को निकालना।
  • फ्रंट (Front): क्यू के सामने का पहला तत्व देखना।
  • रियर (Rear): क्यू के सबसे अंतिम तत्व को देखना।
  • इज़-एम्प्टी (Is-Empty): यह जाँचना कि क्यू खाली है या नहीं।

Types of Queue in Data Structure in Hindi | क्यू के प्रकार :

क्यू के विभिन्न प्रकार होते हैं, जो उनके संचालन और संरचना के आधार पर विभाजित किए जाते हैं:

साधारण क्यू (Simple Queue)
वृत्ताकार क्यू (Circular Queue)
प्राथमिकता क्यू (Priority Queue)
डबल-एंडेड क्यू (Double-Ended Queue)

1. साधारण क्यू (Simple Queue)

साधारण क्यू एक साधारण डेटा संरचना है, जिसमें तत्वों को क्यू के पीछे से डाला जाता है और क्यू के सामने से निकाला जाता है। यह FIFO सिद्धांत का पालन करता है।

उदाहरण:

मान लीजिए कि एक साधारण क्यू में निम्नलिखित क्रम में तत्व डाले जाते हैं:

एनक्यू(10): क्यू = [10]
एनक्यू(20): क्यू = [10, 20]
एनक्यू(30): क्यू = [10, 20, 30]
अब यदि हम डिक्यू ऑपरेशन करें, तो सबसे पहले जो तत्व डाला गया था, वह निकाला जाएगा:

डिक्यू(): क्यू = [20, 30] (क्यू से 10 निकला)

एल्गोरिदम:

एनक्यू (Enqueue):

  • यदि क्यू पूर्ण है, तो "क्यू ओवरफ्लो" त्रुटि प्रदर्शित होती है।
  • अन्यथा, तत्व को क्यू के पीछे जोड़ा जाता है।

एनक्यू(क्यू, आइटम):

    यदि रियर = MAX-1 हो
        तब "क्यू ओवरफ्लो" प्रदर्शित करें
    अन्यथा
        रियर ← रियर + 1
        क्यू[रियर] ← आइटम

डिक्यू (Dequeue):

यदि क्यू खाली है, तो "क्यू अंडरफ्लो" त्रुटि प्रदर्शित होती है।
अन्यथा, क्यू के सामने से तत्व निकाला जाता है।

डिक्यू(क्यू):

    यदि फ्रंट > रियर हो
        तब "क्यू अंडरफ्लो" प्रदर्शित करें
    अन्यथा
        आइटम ← क्यू[फ्रंट]
        फ्रंट ← फ्रंट + 1
        आइटम लौटाएँ

2. वृत्ताकार क्यू (Circular Queue)

वृत्ताकार क्यू में क्यू के दोनों छोर एक-दूसरे से जुड़े होते हैं, यानी रियर क्यू के अंत तक पहुँचने के बाद फिर से प्रारंभिक स्थिति (front) पर आ सकता है। इस क्यू में मेमोरी को कुशलता से प्रबंधित किया जाता है।

उदाहरण:
मान लीजिए कि एक वृत्ताकार क्यू में पाँच स्थान हैं और इसमें कुछ तत्व डाले गए हैं:

एनक्यू(10): क्यू = [10, -, -, -, -]
एनक्यू(20): क्यू = [10, 20, -, -, -]
एनक्यू(30): क्यू = [10, 20, 30, -, -]
डिक्यू(): क्यू = [-, 20, 30, -, -] (क्यू से 10 निकाला)
अब, यदि हम क्यू के रियर को आगे बढ़ाते हैं और क्यू भर जाता है, तो रियर फिर से पहले स्थान पर आ सकता है।

एल्गोरिदम:

एनक्यू (Enqueue):

  • यदि क्यू पूर्ण है, तो "क्यू ओवरफ्लो" त्रुटि प्रदर्शित होती है।
  • अन्यथा, रियर को वृत्ताकार तरीके से बढ़ाकर तत्व जोड़ा जाता है।
एनक्यू(क्यू, आइटम):

    यदि (रियर + 1) % MAX = फ्रंट हो
        तब "क्यू ओवरफ्लो" प्रदर्शित करें
    अन्यथा
        रियर ← (रियर + 1) % MAX
        क्यू[रियर] ← आइटम

डिक्यू (Dequeue):

  • यदि क्यू खाली है, तो "क्यू अंडरफ्लो" त्रुटि प्रदर्शित होती है।
  • अन्यथा, फ्रंट को वृत्ताकार तरीके से बढ़ाकर तत्व निकाला जाता है।
डिक्यू(क्यू):

    यदि फ्रंट = रियर हो
        तब "क्यू अंडरफ्लो" प्रदर्शित करें
    अन्यथा
        फ्रंट ← (फ्रंट + 1) % MAX
        क्यू[फ्रंट] लौटाएँ

3. प्राथमिकता क्यू (Priority Queue)

प्राथमिकता क्यू एक विशेष प्रकार का क्यू है, जहाँ प्रत्येक तत्व के साथ उसकी प्राथमिकता (priority) जुड़ी होती है। तत्वों को FIFO के अनुसार नहीं, बल्कि उनकी प्राथमिकता के अनुसार संसाधित किया जाता है। अधिक प्राथमिकता वाले तत्वों को पहले संसाधित किया जाता है।

उदाहरण:

मान लीजिए प्राथमिकता क्यू में तीन तत्व हैं:

एनक्यू(10, प्राथमिकता 2): क्यू = [10(2)]
एनक्यू(20, प्राथमिकता 1): क्यू = [20(1), 10(2)]
एनक्यू(30, प्राथमिकता 3): क्यू = [20(1), 10(2), 30(3)]
अब, जब हम डिक्यू ऑपरेशन करेंगे, तो प्राथमिकता 1 वाला तत्व पहले निकलेगा, फिर प्राथमिकता 2, और अंत में प्राथमिकता 3 वाला तत्व निकलेगा।

एल्गोरिदम:

एनक्यू (Enqueue):

  • प्राथमिकता के आधार पर तत्वों को क्यू में सही स्थान पर डाला जाता है।

एनक्यू(क्यू, आइटम, प्राथमिकता):
 
   उचित स्थान पर आइटम डालें (प्राथमिकता के आधार पर)

डिक्यू (Dequeue):

  • सबसे अधिक प्राथमिकता वाला तत्व क्यू से निकाला जाता है।
डिक्यू(क्यू):
  
  सबसे उच्च प्राथमिकता वाले तत्व को निकालें

4. डबल-एंडेड क्यू (Double-Ended Queue)

डबल-एंडेड क्यू एक ऐसा क्यू है, जिसमें तत्वों को दोनों छोरों से जोड़ा और निकाला जा सकता है। यह दो प्रकार के होते हैं:

  • इनपुट-रिस्ट्रिक्टेड डीक्यू (Input-Restricted Deque): तत्वों को केवल एक छोर से डाला जा सकता है, लेकिन निकाला दोनों छोर से जा सकता है।
  • आउटपुट-रिस्ट्रिक्टेड डीक्यू (Output-Restricted Deque): तत्वों को दोनों छोर से डाला जा सकता है, लेकिन निकाला केवल एक छोर से जा सकता है।

उदाहरण:

मान लीजिए डबल-एंडेड क्यू में निम्नलिखित ऑपरेशन्स हो रहे हैं:

एनक्यू-रियर(10): क्यू = [10]
एनक्यू-फ्रंट(20): क्यू = [20, 10]
डिक्यू-फ्रंट(): क्यू = [10]

एल्गोरिदम:

एनक्यू-फ्रंट (Enqueue-Front) और एनक्यू-रियर (Enqueue-Rear): तत्वों को फ्रंट और रियर दोनों से डाला जा सकता है।

  • एनक्यू-फ्रंट(क्यू, आइटम):  // फ्रंट से डालना
  • एनक्यू-रियर(क्यू, आइटम):  // रियर से डालना

डिक्यू-फ्रंट (Dequeue-Front) और डिक्यू-रियर (Dequeue-Rear): तत्वों को फ्रंट और रियर दोनों से निकाला जा सकता है।

  • डिक्यू-फ्रंट(क्यू):  // फ्रंट से निकालना
  • डिक्यू-रियर(क्यू):  // रियर से निकालना
Advantages of Queue in Data Structure in Hindi | क्यू के लाभ : 

  • FIFO (First In, First Out) अनुक्रम: क्यू का सबसे बड़ा लाभ यह है कि यह FIFO सिद्धांत का पालन करता है। इसका मतलब है कि जो भी तत्व पहले आता है, उसे पहले संसाधित किया जाता है।
  • यह अनुक्रमिक डेटा प्रोसेसिंग के लिए बहुत उपयोगी है, जैसे कि प्रिंटर कतार, सीपीयू शेड्यूलिंग, और मल्टीटास्किंग।
  • उदाहरण: एक प्रिंटर कतार में जो भी दस्तावेज़ पहले प्रिंटिंग के लिए भेजा जाता है, वह पहले प्रिंट होता है। यह स्पष्ट रूप से एक संगठित प्रक्रिया सुनिश्चित करता है।
  • संसाधनों का अनुशासित वितरण: क्यू डेटा को अनुशासित और क्रमबद्ध तरीके से संगठित करता है। यह संसाधनों का वितरण सुनिश्चित करने के लिए बहुत प्रभावी है। सीपीयू शेड्यूलिंग और अन्य प्रकार की संसाधन प्रबंधन प्रक्रियाओं में क्यू उपयोगी होता है।
  • उदाहरण: जब सीपीयू कई कार्यों को संभालता है, तो यह कार्यों को कतार में रखता है और FIFO के आधार पर उनका निष्पादन करता है, जिससे संसाधन समान रूप से वितरित होते हैं।
  • समान समय पर कई कामों का प्रबंधन: क्यू समानांतर और अनुक्रमिक कार्यों को प्रबंधित करने में सक्षम है। मल्टीटास्किंग सिस्टम्स में कई प्रक्रियाओं को संसाधित करने के लिए क्यू का उपयोग होता है। प्रत्येक कार्य क्यू में डाला जाता है और उन्हें क्रम से संसाधित किया जाता है।
  • उदाहरण: नेटवर्क पैकेट ट्रांसमिशन में, पैकेट्स एक कतार में रखे जाते हैं और उन्हें क्रम में भेजा जाता है।
  • डेटा स्ट्रीमिंग और वास्तविक समय अनुप्रयोगों में उपयोगी: क्यू का उपयोग वास्तविक समय अनुप्रयोगों जैसे कि वीडियो स्ट्रीमिंग, लाइव डेटा प्रोसेसिंग, और नेटवर्क बफरिंग में किया जाता है। यहाँ डेटा को अनुक्रम में संसाधित करने की आवश्यकता होती है ताकि आउटपुट सही क्रम में उपलब्ध हो।
  • उदाहरण : वीडियो स्ट्रीमिंग में, डेटा पैकेट्स एक कतार में संग्रहीत होते हैं और सही क्रम में प्रस्तुत होते हैं, जिससे उपयोगकर्ता को निर्बाध अनुभव मिलता है।
  • डेटा के प्रवाह का कुशल प्रबंधन: क्यू एक स्थिर और संगठित प्रवाह प्रदान करता है, जिससे डेटा के प्रबंधन में आसानी होती है। यह प्रक्रियाओं के बीच डेटा की निर्बाध स्ट्रीमिंग सुनिश्चित करता है।
  • उदाहरण: ईमेल सर्वर में, आने वाले ईमेल्स को क्यू में संग्रहीत किया जाता है और उन्हें क्रमबद्ध रूप से संसाधित किया जाता है।

Disadvantages of Queue in Data Structure in Hindi | क्यू की हानियाँ :

  • अप्रभावी खोज (Inefficient Search): क्यू में किसी विशेष तत्व को खोजने के लिए हमें शुरुआत से लेकर अंत तक पूरा क्यू देखना पड़ता है, क्योंकि इसमें यादृच्छिक (random) एक्सेस की अनुमति नहीं होती। यह खोज प्रक्रियाओं के लिए अप्रभावी है।
  • उदाहरण : यदि क्यू में 1000 तत्व हैं और आपको अंतिम तत्व खोजने की आवश्यकता है, तो आपको प्रत्येक तत्व की जाँच करनी होगी, जिससे समय की हानि होती है।
  • फिक्स्ड साइज लिमिटेशन: साधारण क्यू में, अगर क्यू का अधिकतम आकार पूर्वनिर्धारित है, तो हम उसमें नए तत्व जोड़ने में सक्षम नहीं होते जब तक कि पुराने तत्व हटा न दिए जाएं। यह ओवरफ्लो समस्या उत्पन्न कर सकता है।
  • उदाहरण: यदि क्यू का आकार 10 है और वह पहले से भरा हुआ है, तो जब कोई नया तत्व जोड़ने की कोशिश की जाती है, तो "क्यू ओवरफ्लो" त्रुटि मिलती है।
  • मेमोरी का कुशल उपयोग न होना (Inefficient Memory Utilization): साधारण क्यू में, जब हम क्यू से तत्व निकालते हैं, तो वह स्थान खाली हो जाता है, लेकिन हम उस स्थान को पुनः उपयोग में नहीं ला सकते। इससे मेमोरी का अनुपयोग होता है। इसे दूर करने के लिए वृत्ताकार क्यू (Circular Queue) का उपयोग किया जा सकता है, लेकिन साधारण क्यू इस दृष्टिकोण से कुशल नहीं होता।
  • उदाहरण: साधारण क्यू में, जब कुछ तत्व निकाल लिए जाते हैं, तो वह स्थान खाली होता है, परंतु इसे पुनः उपयोग नहीं किया जा सकता। इससे मेमोरी का क्षय होता है।
  • अनुक्रम में निकासी की बाध्यता: क्यू में तत्वों को केवल उसी क्रम में निकाला जा सकता है, जिस क्रम में उन्हें डाला गया था। इसका मतलब है कि अगर आपको क्यू के किसी बीच के तत्व की आवश्यकता है, तो आपको पहले के सभी तत्वों को निकालना होगा। यह समय और संसाधनों की दृष्टि से कुशल नहीं है।
  • उदाहरण: यदि क्यू में 10 तत्व हैं और आपको 7वें तत्व की आवश्यकता है, तो आपको पहले के सभी 6 तत्वों को निकालना होगा, जिससे संसाधनों का अनुपयोग हो सकता है।
  • विशिष्ट प्राथमिकताओं की कमी (Lack of Specific Priorities): साधारण क्यू में, तत्वों को केवल FIFO क्रम में संसाधित किया जाता है, इसलिए आप तत्वों की प्राथमिकता निर्धारित नहीं कर सकते। हालांकि, प्राथमिकता क्यू (Priority Queue) इसका समाधान प्रदान करता है, लेकिन साधारण क्यू में यह सुविधा नहीं होती।
  • उदाहरण: मान लीजिए कि किसी सिस्टम में कुछ कार्य अधिक महत्वपूर्ण हैं, तो साधारण क्यू में उन्हें पहले संसाधित करने की कोई व्यवस्था नहीं है, क्योंकि यह केवल FIFO क्रम का पालन करता है।
  • वृत्ताकार क्यू में जटिलता (Complexity in Circular Queue): जबकि वृत्ताकार क्यू साधारण क्यू की ओवरफ्लो समस्या को हल करता है, यह समझने और लागू करने में थोड़ी अधिक जटिल हो सकता है, खासकर उन लोगों के लिए जो शुरुआती स्तर पर डेटा संरचनाओं का अध्ययन कर रहे हैं।
  • उदाहरण: वृत्ताकार क्यू में रियर और फ्रंट को लगातार ट्रैक करना और उन्हें अपडेट करना थोड़ा कठिन हो सकता है, विशेष रूप से तब जब रियर और फ्रंट का पुनः एक ही स्थान पर आना हो।