सी ++ कतार का उपयोग कैसे करें

How Use C Queue



परिचय

एक कतार वस्तुओं का एक संग्रह है, जहां सूची में जोड़ा गया पहला आइटम, बाद में हटाया जाने वाला पहला आइटम होना चाहिए। इसलिए जैसे-जैसे वस्तुओं को संग्रह में जोड़ा जाता है, यह आकार में बढ़ रहा है, यानी यह लंबाई में बढ़ रहा है। जब भी किसी वस्तु को हटाना हो तो उसे सबसे पहले जोड़ा जाना चाहिए। यदि आइटम लगातार हटा दिए जाते हैं, तो अगला हटा दिया जाता है, दूसरा आइटम होता है; तीसरा बाद में हटा दिया जाता है, और इसी तरह।

मूल सूची का पहला आइटम हटा दिए जाने के बाद, दूसरा पहला आइटम बन जाता है। दूसरा आइटम हटा दिए जाने के बाद, तीसरा पहला आइटम बन जाता है, और इसी तरह।







कतार का एक अच्छा वास्तविक जीवन उदाहरण है जब लोग सेवा या अच्छे की प्रतीक्षा करने के लिए कतार में खड़े होते हैं। पहले व्यक्ति को आखिरी से पहले पहले परोसा जाता है। हालाँकि, इस ट्यूटोरियल में जिस कतार के बारे में बात की गई है, वह सॉफ्टवेयर कतार है, जैसा कि C++ में डिज़ाइन किया गया है।



फीफो

FIFO का मतलब फर्स्ट-इन, फर्स्ट-आउट है। यह कतार की सराहना करने का एक और तरीका है। इसका मतलब यह है कि सूची में प्रवेश करने वाला पहला आइटम हटाया जाने वाला पहला आइटम है, जब भी हटाना होता है। सूची की शुरुआत को सिर या सामने कहा जाता है; सूची के अंत को पीछे या पूंछ कहा जाता है।



आवश्यक संचालन

एक सॉफ्टवेयर कतार में कम से कम निम्नलिखित ऑपरेशन होने चाहिए:





धकेलना

यह ऑपरेशन, कतार के पीछे एक नया तत्व जोड़ता है। इस ऑपरेशन को आधिकारिक तौर पर एनक्यू कहा जाता है।



खिसक जाना

यह ऑपरेशन कतार के पहले तत्व को हटा देता है, और दूसरा तत्व नया पहला तत्व बन जाता है। इस ऑपरेशन को आधिकारिक तौर पर डेक्यू कहा जाता है। इसे C++ में पॉप कहते हैं।

यह आलेख बताता है कि C++ क्यू डेटा संरचना का उपयोग कैसे करें। इस लेख के बाकी हिस्सों को समझने के लिए आपको सी ++ पॉइंटर्स और संदर्भों को जानना चाहिए।

वर्ग और वस्तु

एक वर्ग चर और कार्यों का एक समूह है जो एक साथ काम करते हैं, जहां चर के लिए मान निर्दिष्ट नहीं होते हैं। जब वेरिएबल्स को मान असाइन किए जाते हैं, तो क्लास एक ऑब्जेक्ट बन जाती है। एक ही वर्ग को दिए गए विभिन्न मूल्यों का परिणाम अलग-अलग वस्तुओं में होता है; यानी, अलग-अलग वस्तुएं अलग-अलग मूल्यों के साथ एक ही वर्ग हैं। कहा जाता है कि किसी क्लास से ऑब्जेक्ट बनाना ऑब्जेक्ट को इंस्टेंट करना है।

नाम, कतार, एक वर्ग है। कतार वर्ग से बनाई गई वस्तु में एक प्रोग्रामर चुना हुआ नाम होता है।

एक वर्ग से संबंधित एक फ़ंक्शन को कक्षा से किसी वस्तु को तुरंत चालू करने की आवश्यकता होती है। सी ++ में, उस फ़ंक्शन का नाम वर्ग के नाम के समान होता है। प्रोग्रामर द्वारा कक्षा से बनाई गई (तत्काल) वस्तुओं को अलग-अलग नाम दिए गए हैं।

कक्षा से एक वस्तु बनाने का अर्थ है वस्तु का निर्माण करना; इसका अर्थ तत्काल करना भी है।

एक सी ++ प्रोग्राम जो क्यू क्लास का उपयोग करता है, फ़ाइल के शीर्ष पर निम्न पंक्तियों से शुरू होता है:

#शामिल
#शामिल
नेमस्पेस एसटीडी का उपयोग करना;

पहली पंक्ति इनपुट/आउटपुट के लिए है। दूसरी पंक्ति कार्यक्रम को कतार वर्ग की सभी विशेषताओं का उपयोग करने की अनुमति देना है। तीसरी पंक्ति प्रोग्राम को मानक नामस्थान में नामों का उपयोग करने की अनुमति देती है।

किसी फ़ंक्शन को ओवरलोड करना

जब दो या दो से अधिक भिन्न फ़ंक्शन हस्ताक्षरों का एक ही नाम होता है, तो उस नाम को अतिभारित कहा जाता है। जब एक फ़ंक्शन को कॉल किया जाता है, तो संख्या और प्रकार के तर्क, यह निर्धारित करते हैं कि वास्तव में कौन सा फ़ंक्शन निष्पादित किया गया है।

निर्माण

पंक्ति<प्रकार>नाम()

निम्नलिखित घोषणा नाम की एक कतार को इंस्टेंट करता है, que of type int.

पंक्ति<NS>वह;

कतार खाली है। घोषणा आरक्षित शब्द से शुरू होती है, कतार के बाद डेटा प्रकार के साथ कोण कोष्ठक। फिर आपके पास प्रोग्रामर को कतार के लिए नाम दिया गया है।

प्रारंभकर्ता सूची के साथ निर्माण

निम्नलिखित परिभाषा से पता चलता है कि कैसे प्रारंभकर्ता सूची के साथ एक कतार बनाने के लिए:

पंक्ति<पानी पर तैरना>वह({१.१, २.२, 3.3, 4.4});

एक कतार को नष्ट करना

एक कतार को नष्ट करने के लिए, बस इसे दायरे से बाहर जाने दें।

कतार तत्व पहुंच

धक्का (मान)

एक कतार एक फर्स्ट-इन-फर्स्ट-आउट सूची है। तो, प्रत्येक मान पीछे से जोड़ा जाता है। निम्नलिखित कोड खंड एक खाली कतार बनाता है, जिसके बाद पीछे से पांच फ्लोट मान जोड़े जाते हैं:

पंक्ति<पानी पर तैरना>वह;

वह।धकेलना(१.१);
वह।धकेलना(२.२);
वह।धकेलना(3.3);
वह।धकेलना(4.4);
वह।धकेलना(5.5);

आकार () स्थिरांक

यह कतार में तत्वों की संख्या देता है। निम्नलिखित कोड दिखाता है:

पंक्ति<पानी पर तैरना>वह;
वह।धकेलना(१.१);वह।धकेलना(२.२);वह।धकेलना(3.3);वह।धकेलना(4.4);वह।धकेलना(5.5);
लागत<<वह।आकार() << 'एन';

आउटपुट 5 है।

सामने()

यह तत्व को हटाए बिना, कतार के पहले तत्व का संदर्भ देता है। निम्नलिखित कोड का आउटपुट 1.1 है।

पंक्ति<पानी पर तैरना>वह;
वह।धकेलना(१.१);वह।धकेलना(२.२);वह।धकेलना(3.3);वह।धकेलना(4.4);वह।धकेलना(5.5);
लागत<<वह।सामने() << 'एन';

तत्व को कतार से नहीं हटाया जाता है।

सामने () स्थिरांक

जब कतार का निर्माण कॉन्स्ट से पहले होता है, तो सामने () के बजाय एक्सप्रेशन फ्रंट () कॉन्स्ट को निष्पादित किया जाता है। इसका उपयोग निम्नलिखित कोड में किया जाता है, उदाहरण के लिए।

स्थिरांकपंक्ति<पानी पर तैरना>वह({१.१, २.२, 3.3, 4.4, 5.5});
लागत<<वह।सामने() << 'एन';

एक निरंतर संदर्भ लौटाया जाता है। तत्व वेक्टर से नहीं हटाया जाता है। कतार तत्वों को बदला नहीं जा सकता।

वापस()

यह तत्व को हटाए बिना, कतार के अंतिम तत्व का संदर्भ देता है। निम्नलिखित कोड का आउटपुट 5.5 है।

पंक्ति<पानी पर तैरना>वह;
वह।धकेलना(१.१);वह।धकेलना(२.२);वह।धकेलना(3.3);वह।धकेलना(4.4);वह।धकेलना(5.5);
लागत<<वह।वापस() << 'एन';

पीछे () स्थिरांक

जब कतार निर्माण कॉन्स्ट से पहले होता है, तो अभिव्यक्ति बैक () कॉन्स्ट को बैक () के बजाय निष्पादित किया जाता है। इसका उपयोग निम्नलिखित कोड में किया जाता है, उदाहरण के लिए।

स्थिरांकपंक्ति<पानी पर तैरना>वह({१.१, २.२, 3.3, 4.4, 5.5});
लागत<<वह।वापस() << 'एन';

एक निरंतर संदर्भ लौटाया जाता है। तत्व को कतार से नहीं हटाया जाता है। कतार निर्माण के लिए पूर्ववर्ती कास्ट के साथ, कतार में तत्वों को बदला नहीं जा सकता है।

कतार क्षमता

आकार () स्थिरांक

- ऊपर देखो

खाली () स्थिरांक

यदि कतार में कोई तत्व नहीं है, तो यह सत्य के लिए 1 लौटाता है, या यदि कतार खाली है तो असत्य के लिए 0 देता है। निम्नलिखित कोड इसे दिखाता है:

पंक्ति<पानी पर तैरना>वह1({१.१, २.२, 3.3, 4.4, 5.5});
लागत<<वह1.खाली() << 'एन';
पंक्ति<पानी पर तैरना>दैट2;
लागत<<वह २.खाली() << 'एन';

आउटपुट है:

0
1

कतार संशोधक

पॉप ()

एक कतार फीफो है, इसलिए किसी भी तत्व को हटाया जाना चाहिए जो कतार के शीर्ष (सिर) से हटा दिया जाना चाहिए। यह सदस्य फ़ंक्शन पहले तत्व को वापस किए बिना हटा देता है। निम्नलिखित कोड इसे दिखाता है:

पंक्ति<पानी पर तैरना>वह({१.१, २.२, 3.3, 4.4, 5.5});
लागत<<वह।सामने() << 'एन';
वह।पॉप();
लागत<<वह।आकार() << 'एन';

आउटपुट है:

१.१
4

ए.स्वैप (बी)

दो कतारों की अदला-बदली की जा सकती है, जैसा कि इस कोड खंड में दिखाया गया है:

पंक्ति<पानी पर तैरना>वह1({१.१, २.२, 3.3, 4.4, 5.5});
पंक्ति<पानी पर तैरना>दैट2({10, बीस});
वह1.विनिमय(दैट2);
लागत<< 'पहला तत्व और que1 का आकार:
'
<<वह1.सामने() <<','<<वह1.आकार() << 'एन';
लागत<< 'पहला तत्व और que2 का आकार'<<
वह २.सामने() <<','<<वह २.आकार() << 'एन';

आउटपुट है:

que1 का पहला तत्व और आकार: 10, 2

que2 का पहला तत्व और आकार: 1.1, 5

ध्यान दें कि यदि आवश्यक हो तो कतार की लंबाई बढ़ा दी जाती है। साथ ही, जिन मानों में प्रतिस्थापन नहीं था, उन्हें कुछ डिफ़ॉल्ट मान से बदल दिया जाता है। डेटा प्रकार एक ही प्रकार के होने चाहिए।

कतारों के लिए समानता और संबंधपरक संचालक

सी ++ में सामान्य वर्णों के लिए, आरोही क्रम में, संख्याएं अपरकेस अक्षरों से पहले आती हैं, जो लोअरकेस अक्षरों से पहले आती हैं। स्पेस कैरेक्टर शून्य और उन सभी से पहले आता है।

समानता संचालक

सत्य के लिए 1 और असत्य के लिए 0 लौटाता है।

== ऑपरेटर

यदि दो कतारों का आकार समान है और संबंधित तत्व समान हैं, तो 1 लौटाता है; अन्यथा यह 0 देता है। उदाहरण:

पंक्ति<स्थिरांक char**वह1({'प्रकार', 'कुछ और'});
पंक्ति<स्थिरांक char**दैट2({'शैतान'});
NSएक पर=वह1==दैट2;
लागत<<एक पर<< 'एन';

आउटपुट है: 0।

!= ऑपरेटर

- उपरोक्त के विपरीत। उदाहरण:

पंक्ति<स्थिरांक char**वह1({'प्रकार', 'कुछ और'});
पंक्ति<स्थिरांक char**दैट2({'शैतान'});
NSएक पर=वह1! =दैट2;
लागत<<एक पर<< 'एन';

आउटपुट है: 1.

संबंधपरक संकारक

सत्य के लिए 1 और असत्य के लिए 0 लौटाता है।

NS

यदि पहली कतार दूसरी कतार का प्रारंभिक उपसमुच्चय है, तो दो समान भागों के तत्व समान और समान क्रम में होने पर 1 लौटाता है। यदि दोनों कतारें एक ही आकार या अलग-अलग आकार की हैं, और बाएं से दाएं चलती हैं, तो पहली कतार में एक तत्व का सामना करना पड़ता है जो दूसरी कतार में संबंधित तत्व से कम है, फिर भी 1 वापस आ जाएगा। अन्यथा 0 लौटा दिया जाता है। उदाहरण:

पंक्ति<स्थिरांक char**वह1({'प्रकार', 'कुछ और'});
पंक्ति<स्थिरांक char**दैट2({'शैतान'});
NSएक पर=वह1<दैट2;
लागत<<एक पर<< 'एन';

आउटपुट 1 है।

> ऑपरेटर

- उपरोक्त के विपरीत। उदाहरण:

पंक्ति<स्थिरांक char**वह1({'प्रकार', 'कुछ और'});
पंक्ति<स्थिरांक char**दैट2({'शैतान'});
NSएक पर=वह1>दैट2;
लागत<<एक पर<< 'एन';

आउटपुट: 0

NS<= Operator

- के समान पंक्ति<स्थिरांक char**वह1({'प्रकार', 'कुछ और'});
पंक्ति<स्थिरांक char**दैट2({'शैतान'});
NSएक पर=वह1<=दैट2;
लागत<<एक पर<< 'एन';

आउटपुट: 1

>= ऑपरेटर

- उपरोक्त के विपरीत। उदाहरण:

पंक्ति<स्थिरांक char**वह1({'प्रकार', 'कुछ और'});
पंक्ति<स्थिरांक char**दैट2({'शैतान'});
NSएक पर=वह1> =दैट2;
लागत<<एक पर<< 'एन';

आउटपुट: 0

वर्ग और उसकी तात्कालिक वस्तुएँ

एक डेटा प्रकार के लिए एक मान है, क्योंकि एक तत्काल वस्तु एक वर्ग के लिए है। कतार निर्माण एक वर्ग को डेटा प्रकार के रूप में भी स्वीकार कर सकता है। निम्नलिखित कार्यक्रम इसे दर्शाता है:

#शामिल
#शामिल
नेमस्पेस एसटीडी का उपयोग करना;
कक्षा
{
सह लोक:
NSएक पर;
स्थिर charचौधरी;
शून्यसमारोह(charनहीं, स्थिरांक char *पी)
{
लागत<< 'वहां ' <<एक पर<< 'मूल्यवान पुस्तकें' <<नहीं<<पी<< ' दुकान में।' << 'एन';
}
स्थिर शून्यमज़ा(charचौधरी)
{
अगर (चौधरी== 'प्रति')
लागत<< 'आधिकारिक स्थिर सदस्य समारोह' << 'एन';
}
};
NSमुख्य()
{
TheCla obj1;TheCla obj2;TheCla obj3;TheCla obj4;TheCla obj5;
पंक्ति<द क्लास>वह;
वह।धकेलना(obj1);वह।धकेलना(obj2);वह।धकेलना(obj3);वह।धकेलना(obj4);वह।धकेलना(obj5);
लागत<<वह।आकार() << 'एन';
वापसी 0;
}

आउटपुट 5 है।

लिंक्ड सूची

कतार सूची को तकनीकी रूप से एक लिंक्ड सूची कहा जाता है। कतार के लिए दो प्रकार की लिंक्ड सूचियाँ हैं: सिंगल लिंक्ड लिस्ट और डबल लिंक्ड लिस्ट।

एक एकल लिंक्ड सूची तत्व को दो सदस्यों की संरचना द्वारा कार्यान्वित किया जा सकता है। एक सदस्य अगले तत्व के लिए एक सूचक रखता है और दूसरा सदस्य डेटा (डेटा के लिए एकवचन) रखता है।

एक डबल लिंक्ड सूची तत्व को तीन सदस्यों की संरचना द्वारा कार्यान्वित किया जा सकता है। मध्य सदस्य डेटाम रखता है, जबकि पहले और तीसरे सदस्य अपने आसन्न तत्वों को पॉइंटर्स रखते हैं।

कतार के अनुप्रयोग

कतार एक प्रथम-इन-फर्स्ट-आउट डेटा संरचना है। कंप्यूटिंग में ऐसी स्थितियाँ होती हैं जब डेटा एक कतार के रूप में आता है, जिसके लिए पहले-पहले-पहले-बाहर व्यवहार की आवश्यकता होती है।

कंप्यूटर संसाधन साझा करना

कंप्यूटर में संसाधन सीमित उपलब्धता का कोई भी भौतिक या आभासी घटक है। इनमें सीपीयू, वीडियो कार्ड, हार्ड ड्राइव और मेमोरी शामिल हैं। ऐसे संसाधन को साझा करने के लिए एक कतार की आवश्यकता होती है।

व्यवधानों को संभालना

कंप्यूटर बाह्य उपकरणों को समय-समय पर कंप्यूटर को बाधित करने की आवश्यकता होती है। रुकावटों को उसी तरह से संभाला जाना चाहिए जैसे वे आए थे। इसके लिए एक कतार की जरूरत है।

जानकारी प्रबंधित करें।

कतार का उपयोग किया जा सकता है, उदाहरण के लिए, यदि फ़ाइलें कंप्यूटर में संग्रहीत हैं, तो नौकरी के लिए एप्लिकेशन फ़ाइलों को प्रबंधित करने के लिए।

निष्कर्ष

एक कतार एक सूची डेटा संरचना है, जो या तो एक एकल लिंक की गई सूची या एक डबल-लिंक्ड सूची है। एक नियम के रूप में, सूची में प्रवेश करने वाला पहला तत्व बाहर आने वाला पहला तत्व है। सी ++ अपने मानक पुस्तकालय में एक कतार डेटा संरचना प्रदान करता है। इस संरचना के लिए उपलब्ध सदस्य कार्यों और ऑपरेटरों की श्रेणियां कतार निर्माण, कतार तत्व पहुंच, कतार क्षमता, कतार संशोधक और कतार अतिभारित ऑपरेटर हैं।

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

एक डेटा प्रकार के लिए एक मान है, क्योंकि एक तत्काल वस्तु एक वर्ग के लिए है। तो, एक विशेष वर्ग को कतार टेम्पलेट इंस्टेंटेशन के लिए डेटा प्रकार के रूप में उपयोग किया जा सकता है। वर्ग के लिए अलग-अलग वस्तुएं वर्ग के लिए अलग-अलग मूल्यों की तरह हो जाती हैं।

कतार में कंप्यूटर पर अनुप्रयोग हैं। इसका उपयोग, उदाहरण के लिए, किसी नौकरी के लिए एप्लिकेशन फ़ाइलों को प्रबंधित करने के लिए किया जा सकता है, यदि फ़ाइलें कंप्यूटर में संग्रहीत हैं।

क्रिसो