क्यू (एब्स्ट्रैक्ट डेटा प्रकार): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 12: Line 12:
|delete_worst={{math|O(1)}}
|delete_worst={{math|O(1)}}
}}
}}
[[Index.php?title=अभिकलन विज्ञान|अभिकलन विज्ञान]] में कतार संस्थाओं का एक संग्रह (अमूर्त डेटा प्रकार) है जो क्रम में बनाए रखा जाता है एवं अनुक्रम के छोर पर संस्थाओं को जोड़कर अनुक्रम के दूसरे छोर से संस्थाओं को हटाकर संशोधित करता है। सम्मेलन के अनुसार, जिस क्रम में तत्वों को जोड़ा जाता है उसके अंत को कतार का पिछला भाग कहा जाता है एवं जिस अंत में तत्वों को हटा दिया जाता है उसे कतार का अगला भाग कहा जाता है जो कि जब उपयोग किए गए शब्दों के अनुरूप होता है जिसके लिए लोग सामान या सेवाओं की प्रतीक्षा करने के लिए क्रम में लगते हैं।
[[Index.php?title=अभिकलन विज्ञान|अभिकलन विज्ञान]] में कतार संस्थाओं का संग्रह (अमूर्त डेटा प्रकार) है जो क्रम में बनाए रखा जाता है एवं अनुक्रम के छोर पर संस्थाओं को जोड़कर अनुक्रम के दूसरे छोर से संस्थाओं को हटाकर संशोधित करता है। सम्मेलन के अनुसार, जिस क्रम में तत्वों की तुलना करी जाती है उसके अंत को कतार का पिछला भाग कहा जाता है एवं जिस अंत में तत्वों को हटा दिया जाता है उसे कतार का अगला भाग कहा जाता है जो कि जब उपयोग किए गए शब्दों के अनुरूप होता है जिसके लिए लोग सामान या सेवाओं की प्रतीक्षा करने के लिए क्रम में लगते हैं।


कतार के पिछले भाग में तत्व जोड़ने की क्रिया को 'एनक्यू' के रूप में जाना जाता है, एवं किसी तत्व को सामने से हटाने की क्रिया को 'डीक्यू' के रूप में जाना जाता है। अन्य कार्यों की भी अनुमति दी जाती है, जिसमें अधिकांशतः ''पीक (डेटा प्रकार संचालन)'' या ''मुख्य'' संचालन सम्मलित होता है, जो अगले तत्व के मूल्य को बिना डीक्यू किए वापस करता है।
कतार के पिछले भाग में तत्व जोड़ने की क्रिया को 'एनक्यू' के रूप में जाना जाता है, एवं किसी तत्व को सामने से हटाने की क्रिया को 'डीक्यू' के रूप में जाना जाता है। अन्य कार्यों की भी अनुमति दी जाती है, जिसमें अधिकांशतः ''पीक (डेटा प्रकार संचालन)'' या ''मुख्य'' संचालन सम्मलित होता है, जो अगले तत्व के मूल्य को बिना डीक्यू किए वापस करता है।


फीफो डेटा संरचना में कतार में जोड़ा गया पहला हटा दिया जाने वाला तत्व होता है। यह आवश्यकता है कि एक बार एक नवीन तत्व जोड़ा जाता है जोकि नए तत्व को हटाए जाने से पहले सभी तत्व जो पहले जोड़े गए थे उन्हें हटा दिया जाना चाहिए। एक कतार एक रेखीय डेटा संरचना का एक उदाहरण है, या अधिक संक्षेप में एक अनुक्रमिक संग्रह है।
फीफो डेटा संरचना में कतार की तुलना करा गया पहला तत्व हटा दिया जाता है। यह आवश्यक है कि एक बार नवीन तत्व तुलना करी जाती है जोकि नए तत्व को हटाए जाने से पहले सभी तत्व जो पहले लगाए गए थे उन्हें हटा दिया जाना चाहिए। कतार रेखीय डेटा संरचना का उदाहरण है, या अधिक संक्षेप में यह अनुक्रमिक संग्रह है। अभिकलन योजना में कतारें सामान्य हैं, जहां उन्हें अक्ष नित्य के साथ [[सार डेटा संरचना]] के रूप में या लक्ष्योन्मुखी भाषाओं में कक्षाओं, डेटा संरचनाओं के रूप में कार्यान्वित किया जाता है। सामान्यतः कार्यान्वयन [[Index.php?title=गोलाकार प्रतिरोधी|गोलाकार प्रतिरोधी]] एवं श्रृंखलित सूचियाँ हैं।
अभिकलन प्रोग्राम में कतारें सामान्य हैं, जहां उन्हें एक्सेस रूटीन के साथ डेटा संरचनाओं के रूप में कार्यान्वित किया जाता है, एक [[सार डेटा संरचना]] के रूप में या ऑब्जेक्ट-ओरिएंटेड भाषाओं में कक्षाओं के रूप में। सामान्यतः कार्यान्वयन [[गोलाकार बफर]] एवं लिंक्ड सूचियाँ हैं।


अभिकलन विज्ञान, [[परिवहन]] एवं संचालन अनुसंधान में कतारें सेवाएं प्रदान करती हैं जहां डेटा, ऑब्जेक्ट्स, व्यक्तियों या घटनाओं जैसी विभिन्न संस्थाओं को संग्रहीत एवं पश्चात संसाधित करने के लिए आयोजित किया जाता है। इन संदर्भों में, क्यू एक बफ़र (अभिकलन विज्ञान) का कार्य करता है।
अभिकलन विज्ञान, [[परिवहन]] एवं संचालन अनुसंधान में कतारें सेवाएं प्रदान करती हैं जहां डेटा, प्रतिरोधी, व्यक्तियों या घटनाओं जैसी विभिन्न संस्थाओं को संग्रहीत एवं पश्चात संसाधित करने के लिए आयोजित किया जाता है। इन संदर्भों में, क्यू एक प्रतिरोधी (अभिकलन विज्ञान) का कार्य करता है। क्यू का अन्य उपयोग चौड़ाई-प्रथम खोज के कार्यान्वयन में है।
क्यू का एक अन्य उपयोग चौड़ाई-प्रथम खोज के कार्यान्वयन में है।


=={{Anchor|BOUNDED}}कतार कार्यान्वयन ==
==कतार कार्यान्वयन ==
सैद्धांतिक रूप से, कतार की एक विशेषता यह है कि इसकी कोई विशिष्ट क्षमता नहीं होती है। यदि कितने तत्व पहले से सम्मलित हों, एक नवीन तत्व निरंतर जोड़ा जा सकता है। यह खाली भी हो सकता है, जिस बिंदु पर एक तत्व को हटाना तब तक असंभव होगा जब तक कि एक नवीन तत्व फिर से जोड़ा नहीं जाता।
सैद्धांतिक रूप से, कतार की विशेषता यह है कि इसकी कोई विशिष्ट क्षमता नहीं होती है। यदि कितने ही तत्व पहले से सम्मलित हों, नवीन तत्व निरंतर तुलना करा जा सकता है। यह खाली भी हो सकता है, जिस बिंदु पर तत्व को हटाना तब तक असंभव होगा जब तक कि नवीन तत्व फिर से तुलना करा नहीं जाता।


निश्चित-लंबाई सरणियों की क्षमता सीमित है, लेकिन यह सच नहीं है कि आइटम को कतार के प्रमुख की ओर कॉपी करने की आवश्यकता है। [[सरणी]] को एक बंद सर्कल में बदलने एवं उस सर्कल में सिर एवं पूंछ को अंतहीन रूप से घूमने देने की सरल चाल सरणी में संग्रहीत वस्तुओं को कभी भी स्थानांतरित करने के लिए अनावश्यक बनाती है। यदि n सरणी का बनावट है, तो अभिकलन सूचकांक modulo n सरणी को एक वृत्त में बदल देगा। यह अभी भी एक उच्च-स्तरीय भाषा में कतार बनाने का वैचारिक रूप से सबसे सरल विधि है, लेकिन यह निश्चित रूप से चीजों को थोड़ा धीमा करता है, क्योंकि सरणी सूचकांकों की तुलना शून्य एवं सरणी बनावट से की जानी चाहिए, जो कि इसमें लगने वाले समय के बराबर है। जांचें कि क्या कोई सरणी अनुक्रमणिका सीमा से बाहर है, जो कुछ भाषाएं करती हैं, लेकिन यह निश्चित रूप से त्वरित एवं गंदे कार्यान्वयन के लिए, या किसी भी उच्च-स्तरीय भाषा के लिए पसंद का विधि होगा जिसमें पॉइंटर सिंटैक्स नहीं है। समय से पहले सरणी बनावट घोषित किया जाना चाहिए, लेकिन अतिप्रवाह होने पर कुछ कार्यान्वयन सिर्फ घोषित सरणी बनावट को दोगुना कर देते हैं। ऑब्जेक्ट्स या पॉइंटर (अभिकलन प्रोग्रामिंग) के साथ अधिकांश आधुनिक भाषाएं गतिशील सूचियों के लिए पुस्तकालयों को लागू कर सकती हैं या उनके साथ आ सकती हैं। हो सकता है कि ऐसी [[डेटा संरचना]]ओं में स्मृति बाधाओं के अतिरिक्त एक निश्चित क्षमता सीमा निर्दिष्ट न हो। कतार अतिप्रवाह परिणाम एक पूर्ण कतार में एक तत्व जोड़ने की कोशिश करने से होता है एवं एक खाली कतार से एक तत्व को निकालने का प्रयास करते समय कतार अंडरफ्लो होता है।
निश्चित-लंबाई सरणियों की क्षमता सीमित है, लेकिन यह सच नहीं है कि वस्तु को कतार के प्रमुख की ओर अनुकृति करने की आवश्यकता है। [[सरणी]] को संवृत क्षेत्र में बदलने एवं उस क्षेत्र में सिर एवं पूंछ को अंतहीन रूप से घूमने देने की सरल चाल सरणी में संग्रहीत वस्तुओं को कभी भी स्थानांतरित करने के लिए अनावश्यक बनाती है। यदि एन सरणी की बनावट है, तो अभिकलन सूची सापेक्ष एन सरणी को वृत्त में बदल देता है। यह अभी भी उच्च-स्तरीय भाषा में कतार बनाने का वैचारिक रूप से सबसे सरल विधि है, लेकिन यह निश्चित रूप से चीजों को थोड़ा धीमा करता है, क्योंकि सरणी सूची की तुलना शून्य एवं सरणी बनावट से की जानी चाहिए, जो कि इसमें लगने वाले समय के बराबर है। जांचें कि क्या कोई सरणी अनुक्रमणिका सीमा से बाहर है, जो कुछ भाषाएं करती हैं लेकिन यह निश्चित रूप से त्वरित एवं गंदे कार्यान्वयन के लिए या किसी भी उच्च-स्तरीय भाषा के लिए पसंद की विधि होगी जिसमें सूचक वाक्यविन्यास नहीं है। समय से पहले सरणी बनावट घोषित किया जाता है, लेकिन अतिप्रवाह होने पर कुछ कार्यान्वयन सिर्फ घोषित सरणी बनावट को दोगुना कर देते हैं। प्रतिरोधी या सूचक (अभिकलन योजनािंग) के साथ अधिकांश आधुनिक भाषाएं गतिशील सूचियों के लिए पुस्तकालयों को लागू कर सकती हैं या उनके साथ आ सकती हैं। कतार अतिप्रवाह परिणाम पूर्ण कतार में तत्व जोड़ने की कोशिश करने से होता है एवं खाली कतार से तत्व को निकालने का प्रयास करते समय कतार अधःप्रवाह होता है।


एक बंधी हुई कतार एक निश्चित संख्या में वस्तुओं तक सीमित एक कतार है।<ref>{{cite web|url=http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html |title=Queue (Java Platform SE 7) |publisher=Docs.oracle.com |date=2014-03-26 |access-date=2014-05-22}}</ref>
बंधी हुई कतार निश्चित संख्या में वस्तुओं तक सीमित कतार है।<ref>{{cite web|url=http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html |title=Queue (Java Platform SE 7) |publisher=Docs.oracle.com |date=2014-03-26 |access-date=2014-05-22}}</ref> फीफो कतारों के कई कुशल कार्यान्वयन हैं। कुशल कार्यान्वयन वह है जो [[बिग ओ नोटेशन]] समय में संचालन-एन-क्यूइंग एवं डी-क्यूइंग- कर सकते है।
फीफो कतारों के कई कुशल कार्यान्वयन हैं। एक कुशल कार्यान्वयन वह है जो [[बिग ओ नोटेशन]] | ओ (1) समय में संचालन-एन-क्यूइंग एवं डी-क्यूइंग- कर सकता है।
*श्रृंखलित सूची
*लिंक्ड सूची
** दोगुनी श्रंखला की गई सूची में दोनों सिरों पर ओ (1) सम्मिलन एवं विलोपन होता है, इसलिए यह कतारों के लिए स्वाभाविक विकल्प है।
** एक दोगुनी लिंक की गई सूची में दोनों सिरों पर ओ (1) सम्मिलन एवं विलोपन होता है, इसलिए यह कतारों के लिए एक स्वाभाविक विकल्प है।
** नियमित रूप से एकल रूप से जुड़ी सूची में सिर्फ एक छोर पर प्रभावी प्रविष्टि एवं विलोपन होता है। चूंकि छोटा संशोधन पहले के अतिरिक्त अंतिम आसंधि के लिए सूचक रखना कुशल कतार को लागू करने में सक्षम करेगा।
** नियमित रूप से एकल रूप से जुड़ी सूची में सिर्फ एक छोर पर प्रभावी प्रविष्टि एवं विलोपन होता है। चूंकि, एक छोटा संशोधन - पहले के अतिरिक्त अंतिम नोड के लिए एक पॉइंटर रखना - इसे एक कुशल कतार को लागू करने में सक्षम करेगा।
* संशोधित गतिशील सरणी का उपयोग करके कार्यान्वित [[Index.php?title=दोनों ओर से समान कतार|दोनों ओर से समान कतार]]
* एक संशोधित गतिशील सरणी का उपयोग करके कार्यान्वित एक [[डबल-एंडेड कतार]]


=== कतारें एवं प्रोग्रामिंग भाषाएं ===
=== कतारें एवं योजनािंग भाषाएं ===
कतारों को एक भिन्न डेटा प्रकार के रूप में लागू किया जा सकता है, या संभवतः डबल-एंडेड कतार (डीक्यू) का एक विशेष स्थिति माना जाता है एवं भिन्न से लागू नहीं किया जाता है। उदाहरण के लिए, [[पर्ल]] एवं [[ रूबी (प्रोग्रामिंग भाषा) ]] दोनों सिरों से एक सरणी को पुश एवं पॉप करने की अनुमति देते हैं, इसलिए कोई पुश एवं शिफ्ट फ़ंक्शंस का उपयोग किसी सूची को एन्क्यू एवं डीक्यू करने के लिए कर सकता है (या, रिवर्स में, कोई अनशिफ्ट एवं पॉप का उपयोग कर सकता है),<ref>{{cite web|url=https://ruby-doc.org/core-3.1.0/Array.html#class-Array-label-Adding+Items+to+Arrays |title=Array (Ruby 3.1) |date=2021-12-25 |access-date=2022-05-11}}</ref> चूंकि कुछ स्थितियों में ये संचालन कुशल नहीं हैं।
कतारों को भिन्न डेटा प्रकार के रूप में लागू किया जाता है, या संभवतः दोनों ओर से समान कतार (डीक्यू) की विशेष स्थिति मानी जाती है एवं भिन्न रूप से लागू नहीं की जाती है। उदाहरण के लिए, [[Index.php?title=मोती|मोती]] एवं[[ रूबी (प्रोग्रामिंग भाषा) | रूबी (योजनािंग भाषा)]] दोनों सिरों से सरणी को प्रेरणा एवं सहसा करने की अनुमति देते हैं, इसलिए कोई प्रेरणा एवं समीज समारोह का उपयोग किसी सूची को एन्क्यू एवं डीक्यू करने के लिए करता है, (या, रिवर्स में, कोई अनशिफ्ट एवं सहसा का उपयोग कर सकता है),<ref>{{cite web|url=https://ruby-doc.org/core-3.1.0/Array.html#class-Array-label-Adding+Items+to+Arrays |title=Array (Ruby 3.1) |date=2021-12-25 |access-date=2022-05-11}}</ref> चूंकि कुछ स्थितियों में ये संचालन कुशल नहीं हैं।


C++ की [[मानक टेम्पलेट लाइब्रेरी]] प्रदान करती है a<code>queue</code>टेम्पलेट क्लास जो सिर्फ पुश/पॉप ऑपरेशंस तक ही सीमित है। J2SE5.0 के पश्चात से, Java लाइब्रेरी में a {{Javadoc:SE|java/util|Queue}} इंटरफ़ेस जो कतार संचालन निर्दिष्ट करता है; कार्यान्वयन वर्ग सम्मलित हैं {{Javadoc:SE|java/util|LinkedList}} एवं (J2SE 1.6 से) {{Javadoc:SE|java/util|ArrayDeque}}. PHP में [http://www.php.net/manual/en/class.splqueue.php SplQueue] क्लास एवं बीनस्टॉकड एवं [[ जर्मनी ]] जैसी थर्ड पार्टी लाइब्रेरी हैं।
सी ++ की [[Index.php?title=मानक क्रमादेश कतार संग्रह|मानक क्रमादेश]] कतार [[Index.php?title=मानक क्रमादेश संग्रह|संग्रह]] प्रदान करता है जो सिर्फ प्रेरणा/सहसा संचालन तक ही सीमित है। जेटूएसईफाइव .शून्य के पश्चात, जावा क्रमादेश संग्रह में {{Javadoc:SE|java/util|कतार}}अंतराफलक जो कतार संचालन निर्दिष्ट करता है; कार्यान्वयन वर्ग सम्मलित हैं {{Javadoc:SE|java/util|श्रृंखलित सूची}} एवं (जेटूएसईएक.छह से) {{Javadoc:SE|java/util|शृंखला समूह विपंक्ति}}. पीएचपी में [./Http://www.php.net/manual/en/class.splqueue.php एसक्यूएल शृंखला समूह] वर्ग एवं[[ जर्मनी ]]जैसी तृतीय पक्ष क्रमादेश का संग्रह हैं।


=== उदाहरण ===
=== उदाहरण ===
[[जावास्क्रिप्ट]] में लागू एक साधारण कतार:
[[जावास्क्रिप्ट]] में लागू साधारण कतार:


<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
Line 57: Line 54:
}
}
</syntaxhighlight>
</syntaxhighlight>
== विशुद्ध रूप से कार्यात्मक कार्यान्वयन ==
== विशुद्ध रूप से कार्यात्मक कार्यान्वयन ==
कतारों को [[विशुद्ध रूप से कार्यात्मक डेटा संरचना]] के रूप में भी लागू किया जा सकता है।<ref>{{cite web |last1=Okasaki|first1=Chris|title=विशुद्ध रूप से कार्यात्मक डेटा संरचनाएं|url=https://doc.lagout.org/programmation/Functional%20Programming/Chris_Okasaki-Purely_Functional_Data_Structures-Cambridge_University_Press%281998%29.pdf}}</ref> दो कार्यान्वयन हैं। पहला ही प्राप्त करता है <math>O(1)</math> प्रति संचालन औसतन। यही है, [[परिशोधित विश्लेषण]] का समय है <math>O(1)</math>, लेकिन व्यक्तिगत संचालन लग सकते हैं <math>O(n)</math> जहाँ n कतार में तत्वों की संख्या है। दूसरे कार्यान्वयन को 'रीयल-टाइम क्यू' कहा जाता है<ref>{{cite journal|last1=Hood|first1=Robert|last2=Melville|first2=Robert|title=शुद्ध लिस्प में रीयल-टाइम कतार संचालन|journal=Information Processing Letters|date=November 1981|volume=13|issue=2|pages=50–54 |doi=10.1016/0020-0190(81)90030-2 |hdl=1813/6273|hdl-access=free}}</ref> एवं यह कतार को (1) सबसे खराब समय में संचालन के साथ [[लगातार डेटा संरचना]] होने की अनुमति देता है। यह एक अधिक जटिल कार्यान्वयन है एवं [[memoization]] के साथ [[आलसी मूल्यांकन]] सूचियों की आवश्यकता होती है।
कतारों को [[विशुद्ध रूप से कार्यात्मक डेटा संरचना]] के रूप में भी लागू किया जाता है।<ref>{{cite web |last1=Okasaki|first1=Chris|title=विशुद्ध रूप से कार्यात्मक डेटा संरचनाएं|url=https://doc.lagout.org/programmation/Functional%20Programming/Chris_Okasaki-Purely_Functional_Data_Structures-Cambridge_University_Press%281998%29.pdf}}</ref> दो कार्यान्वयन हैं: पहला प्राप्त करता है <math>O(1)</math> प्रति संचालन औसतन। [[परिशोधित विश्लेषण]] का समय है <math>O(1)</math>, लेकिन व्यक्तिगत संचालन लगते हैं जैसे <math>O(n)</math> जहाँ एन कतार में तत्वों की संख्या है। दूसरे कार्यान्वयन को 'वास्तविक काल क्यू' कहा जाता है<ref>{{cite journal|last1=Hood|first1=Robert|last2=Melville|first2=Robert|title=शुद्ध लिस्प में रीयल-टाइम कतार संचालन|journal=Information Processing Letters|date=November 1981|volume=13|issue=2|pages=50–54 |doi=10.1016/0020-0190(81)90030-2 |hdl=1813/6273|hdl-access=free}}</ref> एवं यह कतार को <math>O(1)</math> सबसे खराब समय में संचालन के साथ [[लगातार डेटा संरचना]] होने की अनुमति देता है। यह एक अधिक जटिल कार्यान्वयन है एवं [[Index.php?title=मेमिओजेशन|मेमिओजेशन]] के साथ [[Index.php?title=मंद मूल्यांकन|मंद मूल्यांकन]] सूचियों की आवश्यकता होती है।


=== परिशोधित कतार ===
=== परिशोधित कतार ===


इस कतार का डेटा दो Linked_list#Singly_linked_list|singly-linked_list नाम की दो सूचियों में संग्रहीत है <math>f</math> एवं <math>r</math>. सूची <math>f</math> कतार के सामने का भाग रखता है। सूची <math>r</math> शेष तत्वों (उर्फ, कतार के पीछे) को उल्टे क्रम में रखता है। के सिर पर एक नोड जोड़कर कतार के सामने सम्मिलित करना आसान है <math>f</math>. एवं यदि <math>r</math> खाली नहीं है, के सिर पर नोड को हटाकर कतार के अंत से हटाना आसान है <math>r</math>. कब <math>r</math> खाली है, सूची <math>f</math> उलटा एवं सौंपा गया है <math>r</math> एवं उसके पश्चात के सिर <math>r</math> हटा दिया गया।
इस कतार का डेटा दो श्रृंखलित सूची नाम की दो सूचियों में संग्रहीत है <math>f</math> एवं <math>r</math>. सूची <math>f</math> कतार के सामने का भाग रखता है। सूची <math>r</math> शेष तत्वों (कतार के पीछे) को उल्टे क्रम में रखता है। सिर पर एक आसंधि जोड़कर <math>f</math> कतार के सामने सम्मिलित करना आसान है। यदि <math>r</math> खाली नहीं है, तो  सिर पर आसंधि को हटाकर कतार के अंत से <math>r</math> हटाना आसान है। कब <math>r</math> खाली है, सूची <math>f</math> विपरीत एवं सौंपा गया है <math>r</math> एवं उसके पश्चात के सिर <math>r</math> हटा दिया गया है।


इन्सर्ट (एनक्यू) निरंतर लेता है <math>O(1)</math> समय। निष्कासन (डेक्यू) लेता है <math>O(1)</math> जब सूची <math>r</math> खाली नहीं है। कब <math>r</math> खाली है, उल्टा लेता है <math>O(n)</math> कहाँ <math>n</math> में तत्वों की संख्या है <math>f</math>. लेकिन, हम कह सकते हैं कि यह है <math>O(1)</math> परिशोधित विश्लेषण समय, क्योंकि प्रत्येक तत्व में <math>f</math> डाला जाना था एवं जब इसे डाला गया था, तब हम रिवर्स में प्रत्येक तत्व के लिए एक स्थिर लागत निर्दिष्ट कर सकते हैं।
इन्सर्ट (एनक्यू) निरंतर लेता है <math>O(1)</math> समय। निष्कासन (डेक्यू) लेता है <math>O(1)</math> जब सूची <math>r</math> खाली नहीं है। कब <math>r</math> खाली है, विपरीत लेता है <math>O(n)</math> कहाँ <math>n</math> में तत्वों की संख्या है <math>f</math>. लेकिन, हम कह सकते हैं कि यह है <math>O(1)</math> परिशोधित विश्लेषण समय, क्योंकि प्रत्येक तत्व में <math>f</math> डाला जाना था एवं जब इसे डाला गया था, तब हम रिवर्स में प्रत्येक तत्व के लिए एक स्थिर लागत निर्दिष्ट कर सकते हैं।


=== वास्तविक समय कतार ===
=== वास्तविक समय कतार ===


रीयल-टाइम कतार प्राप्त होती है <math>O(1)</math> परिशोधन के बिना, सभी कार्यों के लिए समय। यह चर्चा तकनीकी होगी, इसलिए याद रखें कि, के लिए <math>l</math> एक सूची, <math>|l|</math> इसकी लंबाई को दर्शाता है, कि NIL एक खाली सूची का प्रतिनिधित्व करता है एवं <math>\operatorname{CONS}(h,t)</math> उस सूची का प्रतिनिधित्व करता है जिसका सिर एच है एवं जिसकी पूंछ टी है।
वास्तविक काल <math>O(1)</math> कतार परिशोधन के बिना सभी कार्यों के लिए समय प्राप्त होता है। यह चर्चा तकनीकी होगी, इसलिए याद रखें कि, के लिए <math>l</math> एक सूची, <math>|l|</math> इसकी लंबाई को दर्शाता है, कि NIL एक खाली सूची का प्रतिनिधित्व करता है एवं <math>\operatorname{CONS}(h,t)</math> उस सूची का प्रतिनिधित्व करता है जिसका सिर एच है एवं जिसकी पूंछ टी है।


हमारी कतारों को लागू करने के लिए उपयोग की जाने वाली डेटा संरचना में तीन Linked_list#Singly_linked_list|singly-linked सूचियाँ सम्मलित हैं <math>(f,r,s)</math> जहाँ f कतार का अगला भाग है, r विपरीत क्रम में कतार का पिछला भाग है। संरचना का अपरिवर्तनीय यह है कि एस इसके बिना एफ के पीछे है <math>|r|</math> पहला तत्व, अर्थात् <math>|s|=|f|-|r|</math>. कतार की पूँछ <math>(\operatorname{CONS}(x,f),r,s)</math> तब लगभग है <math>(f,r,s)</math> एवं
हमारी कतारों को लागू करने के लिए उपयोग की जाने वाली डेटा संरचना में तीन श्रृंखलित सूचियाँ सम्मलित हैं <math>(f,r,s)</math> जहाँ f कतार का अगला भाग है, r विपरीत क्रम में कतार का पिछला भाग है। संरचना का अपरिवर्तनीय यह है कि एस इसके बिना एफ के पीछे है <math>|r|</math> पहला तत्व, अर्थात् <math>|s|=|f|-|r|</math>. कतार की पूँछ <math>(\operatorname{CONS}(x,f),r,s)</math> तब लगभग है <math>(f,r,s)</math> एवं
एक तत्व x को सम्मिलित करना <math>(f,r,s)</math> लगभग है <math>(f,\operatorname{CONS}(x,r),s)</math>. ऐसा लगभग इसलिए कहा जाता है, क्योंकि उन दोनों परिणामों में, <math>|s|=|f|-|r|+1</math>. एक सहायक कार्य <math>aux</math> फिर संतुष्ट होने के लिए अपरिवर्तनीय को बुलाया जाना चाहिए। इस पर निर्भर करते हुए दो स्थितियों पर विचार किया जाना चाहिए <math>s</math> खाली सूची है, किस स्थितियों में <math>|r|=|f|+1</math>, या नहीं। औपचारिक परिभाषा है <math>\operatorname{aux}(f,r,\operatorname{Cons}(\_,s))=(f,r,s)</math> एवं <math>\operatorname{aux}(f,r,\text{NIL})=(f',\text{NIL},f')</math> कहाँ <math>f'</math> f के पश्चात r का उल्टा होता है।
एक तत्व x को सम्मिलित करना <math>(f,r,s)</math> लगभग है <math>(f,\operatorname{CONS}(x,r),s)</math>. ऐसा लगभग इसलिए कहा जाता है, क्योंकि उन दोनों परिणामों में, <math>|s|=|f|-|r|+1</math>. एक सहायक कार्य <math>aux</math> फिर संतुष्ट होने के लिए अपरिवर्तनीय को बुलाया जाना चाहिए। इस पर निर्भर करते हुए दो स्थितियों पर विचार किया जाना चाहिए <math>s</math> खाली सूची है, किस स्थितियों में <math>|r|=|f|+1</math>, या नहीं। औपचारिक परिभाषा है <math>\operatorname{aux}(f,r,\operatorname{Cons}(\_,s))=(f,r,s)</math> एवं <math>\operatorname{aux}(f,r,\text{NIL})=(f',\text{NIL},f')</math> कहाँ <math>f'</math> f के पश्चात r का विपरीत होता है।


चलो फोन करते हैं <math>\operatorname{reverse}(f,r)</math> फ़ंक्शन जो f के पश्चात r देता है, उलटा होता है। चलिए यह भी मान लेते हैं <math>|r|=|f|+1</math>, क्योंकि यह वह स्थिति है जब इस फ़ंक्शन को कॉल किया जाता है। अधिक त्रुटिहीन रूप से, हम एक आलसी कार्य को परिभाषित करते हैं <math>\operatorname{rotate}(f,r,a)</math> जो इनपुट तीन सूची के रूप में लेता है <math>|r|=|f|+1</math>, एवं r का उलटा एवं a का f का संयोजन लौटाता है। तब <math>\operatorname{reverse}(f,r)=\operatorname{rotate}(f,r,\text{NIL})</math>.
चलो फोन करते हैं <math>\operatorname{reverse}(f,r)</math> फ़ंक्शन जो f के पश्चात r देता है, विपरीत होता है। चलिए यह भी मान लेते हैं <math>|r|=|f|+1</math>, क्योंकि यह वह स्थिति है जब इस फ़ंक्शन को कॉल किया जाता है। अधिक त्रुटिहीन रूप से, हम एक मंद कार्य को परिभाषित करते हैं <math>\operatorname{rotate}(f,r,a)</math> जो इनपुट तीन सूची के रूप में लेता है <math>|r|=|f|+1</math>, एवं r का विपरीत एवं a का f का संयोजन लौटाता है। तब <math>\operatorname{reverse}(f,r)=\operatorname{rotate}(f,r,\text{NIL})</math>.घुमाने की आगमनात्मक परिभाषा है <math>\operatorname{rotate}(\text{NIL},\operatorname{Cons}(y,\text{NIL}),a)=\operatorname{Cons}(y,a)</math> एवं <math>\operatorname{rotate}(\operatorname{CONS}(x,f),\operatorname{CONS}(y,r),a)=\operatorname{Cons}(x,\operatorname{rotate}(f,r,\operatorname{CONS}(y,a)))</math>. इसके चलने का समय है <math>O(r)</math>, लेकिन, चूंकि मंद मूल्यांकन का उपयोग किया जाता है, गणना तब तक विलंबित होती है जब तक कि गणना द्वारा परिणाम को मजबूर नहीं किया जाता है।
घुमाने की आगमनात्मक परिभाषा है <math>\operatorname{rotate}(\text{NIL},\operatorname{Cons}(y,\text{NIL}),a)=\operatorname{Cons}(y,a)</math> एवं <math>\operatorname{rotate}(\operatorname{CONS}(x,f),\operatorname{CONS}(y,r),a)=\operatorname{Cons}(x,\operatorname{rotate}(f,r,\operatorname{CONS}(y,a)))</math>. इसके चलने का समय है <math>O(r)</math>, लेकिन, चूंकि आलसी मूल्यांकन का उपयोग किया जाता है, गणना तब तक विलंबित होती है जब तक कि गणना द्वारा परिणाम को मजबूर नहीं किया जाता है।


डेटा संरचना में सूची के दो उद्देश्य हैं। यह सूची काउंटर के रूप में कार्य करती है <math>|f|-|r|</math>, वास्तव में, <math>|f|=|r|</math> यदि एवं सिर्फ यदि खाली सूची है। यह काउंटर हमें यह सुनिश्चित करने की अनुमति देता है कि पिछला कभी भी सामने की सूची से अधिक लंबा न हो। इसके अतिरिक्त, एस का उपयोग करना, जो कि एफ की पूंछ है, प्रत्येक पूंछ के समय  (आलसी) सूची एफ के एक हिस्से की गणना को मजबूर करता है एवं संचालन सम्मिलित करता है। इसलिए कब <math>|f|=|r|</math>, सूची f पूरी प्रकार से मजबूर है। यदि ऐसा नहीं होता, तो f का आंतरिक प्रतिनिधित्व परिशिष्ट का... परिशिष्ट का कुछ परिशिष्ट हो सकता है, एवं बल लगाना अब एक निरंतर समय संचालन नहीं होगा।
डेटा संरचना में सूची के दो उद्देश्य हैं। यह सूची काउंटर के रूप में कार्य करती है <math>|f|-|r|</math>, वास्तव में, <math>|f|=|r|</math> यदि एवं सिर्फ यदि खाली सूची है। यह काउंटर हमें यह सुनिश्चित करने की अनुमति देता है कि पिछला कभी भी सामने की सूची से अधिक लंबा न हो। इसके अतिरिक्त, एस का उपयोग करना, जो कि एफ की पूंछ है, प्रत्येक पूंछ के समय  (मंद) सूची एफ के एक हिस्से की गणना को मजबूर करता है एवं संचालन सम्मिलित करता है। इसलिए कब <math>|f|=|r|</math>, सूची f पूरी प्रकार से मजबूर है। यदि ऐसा नहीं होता, तो f का आंतरिक प्रतिनिधित्व का कुछ परिशिष्ट हो सकता है, एवं बल लगाना अब एक निरंतर समय संचालन नहीं होता है।


== यह भी देखें ==
== यह भी देखें ==
{{Portal|Computer programming}}
{{Portal|Computer programming}}
* सर्कुलर बफर
* परिपत्र प्रतिरोधी
* डबल-एंडेड कतार (डीक्यू)
* दोनों ओर से समान कतार (डीक्यू)
*[[प्राथमिकता कतार]]
*[[प्राथमिकता कतार]]
* कतार सिद्धांत
* कतार सिद्धांत
*स्टैक (अमूर्त डेटा प्रकार) - कतार के विपरीत: LIFO (लास्ट इन फ़र्स्ट आउट)
*ढेर (अमूर्त डेटा प्रकार) - कतार के विपरीत: लीफ़ो (लास्ट इन फ़र्स्ट आउट)


==संदर्भ==
==संदर्भ==

Revision as of 23:45, 1 March 2023

Queue
Data Queue.svg
Representation of a FIFO (first in, first out) queue
Time complexity in big O notation
Algorithm Average Worst case
Space O(n) O(n)
Search O(n) O(n)
Insert O(1) O(1)
Delete O(1) O(1)

अभिकलन विज्ञान में कतार संस्थाओं का संग्रह (अमूर्त डेटा प्रकार) है जो क्रम में बनाए रखा जाता है एवं अनुक्रम के छोर पर संस्थाओं को जोड़कर अनुक्रम के दूसरे छोर से संस्थाओं को हटाकर संशोधित करता है। सम्मेलन के अनुसार, जिस क्रम में तत्वों की तुलना करी जाती है उसके अंत को कतार का पिछला भाग कहा जाता है एवं जिस अंत में तत्वों को हटा दिया जाता है उसे कतार का अगला भाग कहा जाता है जो कि जब उपयोग किए गए शब्दों के अनुरूप होता है जिसके लिए लोग सामान या सेवाओं की प्रतीक्षा करने के लिए क्रम में लगते हैं।

कतार के पिछले भाग में तत्व जोड़ने की क्रिया को 'एनक्यू' के रूप में जाना जाता है, एवं किसी तत्व को सामने से हटाने की क्रिया को 'डीक्यू' के रूप में जाना जाता है। अन्य कार्यों की भी अनुमति दी जाती है, जिसमें अधिकांशतः पीक (डेटा प्रकार संचालन) या मुख्य संचालन सम्मलित होता है, जो अगले तत्व के मूल्य को बिना डीक्यू किए वापस करता है।

फीफो डेटा संरचना में कतार की तुलना करा गया पहला तत्व हटा दिया जाता है। यह आवश्यक है कि एक बार नवीन तत्व तुलना करी जाती है जोकि नए तत्व को हटाए जाने से पहले सभी तत्व जो पहले लगाए गए थे उन्हें हटा दिया जाना चाहिए। कतार रेखीय डेटा संरचना का उदाहरण है, या अधिक संक्षेप में यह अनुक्रमिक संग्रह है। अभिकलन योजना में कतारें सामान्य हैं, जहां उन्हें अक्ष नित्य के साथ सार डेटा संरचना के रूप में या लक्ष्योन्मुखी भाषाओं में कक्षाओं, डेटा संरचनाओं के रूप में कार्यान्वित किया जाता है। सामान्यतः कार्यान्वयन गोलाकार प्रतिरोधी एवं श्रृंखलित सूचियाँ हैं।

अभिकलन विज्ञान, परिवहन एवं संचालन अनुसंधान में कतारें सेवाएं प्रदान करती हैं जहां डेटा, प्रतिरोधी, व्यक्तियों या घटनाओं जैसी विभिन्न संस्थाओं को संग्रहीत एवं पश्चात संसाधित करने के लिए आयोजित किया जाता है। इन संदर्भों में, क्यू एक प्रतिरोधी (अभिकलन विज्ञान) का कार्य करता है। क्यू का अन्य उपयोग चौड़ाई-प्रथम खोज के कार्यान्वयन में है।

कतार कार्यान्वयन

सैद्धांतिक रूप से, कतार की विशेषता यह है कि इसकी कोई विशिष्ट क्षमता नहीं होती है। यदि कितने ही तत्व पहले से सम्मलित हों, नवीन तत्व निरंतर तुलना करा जा सकता है। यह खाली भी हो सकता है, जिस बिंदु पर तत्व को हटाना तब तक असंभव होगा जब तक कि नवीन तत्व फिर से तुलना करा नहीं जाता।

निश्चित-लंबाई सरणियों की क्षमता सीमित है, लेकिन यह सच नहीं है कि वस्तु को कतार के प्रमुख की ओर अनुकृति करने की आवश्यकता है। सरणी को संवृत क्षेत्र में बदलने एवं उस क्षेत्र में सिर एवं पूंछ को अंतहीन रूप से घूमने देने की सरल चाल सरणी में संग्रहीत वस्तुओं को कभी भी स्थानांतरित करने के लिए अनावश्यक बनाती है। यदि एन सरणी की बनावट है, तो अभिकलन सूची सापेक्ष एन सरणी को वृत्त में बदल देता है। यह अभी भी उच्च-स्तरीय भाषा में कतार बनाने का वैचारिक रूप से सबसे सरल विधि है, लेकिन यह निश्चित रूप से चीजों को थोड़ा धीमा करता है, क्योंकि सरणी सूची की तुलना शून्य एवं सरणी बनावट से की जानी चाहिए, जो कि इसमें लगने वाले समय के बराबर है। जांचें कि क्या कोई सरणी अनुक्रमणिका सीमा से बाहर है, जो कुछ भाषाएं करती हैं लेकिन यह निश्चित रूप से त्वरित एवं गंदे कार्यान्वयन के लिए या किसी भी उच्च-स्तरीय भाषा के लिए पसंद की विधि होगी जिसमें सूचक वाक्यविन्यास नहीं है। समय से पहले सरणी बनावट घोषित किया जाता है, लेकिन अतिप्रवाह होने पर कुछ कार्यान्वयन सिर्फ घोषित सरणी बनावट को दोगुना कर देते हैं। प्रतिरोधी या सूचक (अभिकलन योजनािंग) के साथ अधिकांश आधुनिक भाषाएं गतिशील सूचियों के लिए पुस्तकालयों को लागू कर सकती हैं या उनके साथ आ सकती हैं। कतार अतिप्रवाह परिणाम पूर्ण कतार में तत्व जोड़ने की कोशिश करने से होता है एवं खाली कतार से तत्व को निकालने का प्रयास करते समय कतार अधःप्रवाह होता है।

बंधी हुई कतार निश्चित संख्या में वस्तुओं तक सीमित कतार है।[1] फीफो कतारों के कई कुशल कार्यान्वयन हैं। कुशल कार्यान्वयन वह है जो बिग ओ नोटेशन समय में संचालन-एन-क्यूइंग एवं डी-क्यूइंग- कर सकते है।

  • श्रृंखलित सूची
    • दोगुनी श्रंखला की गई सूची में दोनों सिरों पर ओ (1) सम्मिलन एवं विलोपन होता है, इसलिए यह कतारों के लिए स्वाभाविक विकल्प है।
    • नियमित रूप से एकल रूप से जुड़ी सूची में सिर्फ एक छोर पर प्रभावी प्रविष्टि एवं विलोपन होता है। चूंकि छोटा संशोधन पहले के अतिरिक्त अंतिम आसंधि के लिए सूचक रखना कुशल कतार को लागू करने में सक्षम करेगा।
  • संशोधित गतिशील सरणी का उपयोग करके कार्यान्वित दोनों ओर से समान कतार

कतारें एवं योजनािंग भाषाएं

कतारों को भिन्न डेटा प्रकार के रूप में लागू किया जाता है, या संभवतः दोनों ओर से समान कतार (डीक्यू) की विशेष स्थिति मानी जाती है एवं भिन्न रूप से लागू नहीं की जाती है। उदाहरण के लिए, मोती एवं रूबी (योजनािंग भाषा) दोनों सिरों से सरणी को प्रेरणा एवं सहसा करने की अनुमति देते हैं, इसलिए कोई प्रेरणा एवं समीज समारोह का उपयोग किसी सूची को एन्क्यू एवं डीक्यू करने के लिए करता है, (या, रिवर्स में, कोई अनशिफ्ट एवं सहसा का उपयोग कर सकता है),[2] चूंकि कुछ स्थितियों में ये संचालन कुशल नहीं हैं।

सी ++ की मानक क्रमादेश कतार संग्रह प्रदान करता है जो सिर्फ प्रेरणा/सहसा संचालन तक ही सीमित है। जेटूएसईफाइव .शून्य के पश्चात, जावा क्रमादेश संग्रह में कतारअंतराफलक जो कतार संचालन निर्दिष्ट करता है; कार्यान्वयन वर्ग सम्मलित हैं सूची.html श्रृंखलित सूची एवं (जेटूएसईएक.छह से) समूह विपंक्ति.html शृंखला समूह विपंक्ति. पीएचपी में [./Http://www.php.net/manual/en/class.splqueue.php एसक्यूएल शृंखला समूह] वर्ग एवंजर्मनी जैसी तृतीय पक्ष क्रमादेश का संग्रह हैं।

उदाहरण

जावास्क्रिप्ट में लागू साधारण कतार:

class Queue {
    constructor() {
        this.items = [];
    }

    enqueue(element) {
        this.items.push(element);
    }

    dequeue() {
        return this.items.shift();
    }
}

विशुद्ध रूप से कार्यात्मक कार्यान्वयन

कतारों को विशुद्ध रूप से कार्यात्मक डेटा संरचना के रूप में भी लागू किया जाता है।[3] दो कार्यान्वयन हैं: पहला प्राप्त करता है प्रति संचालन औसतन। परिशोधित विश्लेषण का समय है , लेकिन व्यक्तिगत संचालन लगते हैं जैसे जहाँ एन कतार में तत्वों की संख्या है। दूसरे कार्यान्वयन को 'वास्तविक काल क्यू' कहा जाता है[4] एवं यह कतार को सबसे खराब समय में संचालन के साथ लगातार डेटा संरचना होने की अनुमति देता है। यह एक अधिक जटिल कार्यान्वयन है एवं मेमिओजेशन के साथ मंद मूल्यांकन सूचियों की आवश्यकता होती है।

परिशोधित कतार

इस कतार का डेटा दो श्रृंखलित सूची नाम की दो सूचियों में संग्रहीत है एवं . सूची कतार के सामने का भाग रखता है। सूची शेष तत्वों (कतार के पीछे) को उल्टे क्रम में रखता है। सिर पर एक आसंधि जोड़कर कतार के सामने सम्मिलित करना आसान है। यदि खाली नहीं है, तो सिर पर आसंधि को हटाकर कतार के अंत से हटाना आसान है। कब खाली है, सूची विपरीत एवं सौंपा गया है एवं उसके पश्चात के सिर हटा दिया गया है।

इन्सर्ट (एनक्यू) निरंतर लेता है समय। निष्कासन (डेक्यू) लेता है जब सूची खाली नहीं है। कब खाली है, विपरीत लेता है कहाँ में तत्वों की संख्या है . लेकिन, हम कह सकते हैं कि यह है परिशोधित विश्लेषण समय, क्योंकि प्रत्येक तत्व में डाला जाना था एवं जब इसे डाला गया था, तब हम रिवर्स में प्रत्येक तत्व के लिए एक स्थिर लागत निर्दिष्ट कर सकते हैं।

वास्तविक समय कतार

वास्तविक काल कतार परिशोधन के बिना सभी कार्यों के लिए समय प्राप्त होता है। यह चर्चा तकनीकी होगी, इसलिए याद रखें कि, के लिए एक सूची, इसकी लंबाई को दर्शाता है, कि NIL एक खाली सूची का प्रतिनिधित्व करता है एवं उस सूची का प्रतिनिधित्व करता है जिसका सिर एच है एवं जिसकी पूंछ टी है।

हमारी कतारों को लागू करने के लिए उपयोग की जाने वाली डेटा संरचना में तीन श्रृंखलित सूचियाँ सम्मलित हैं जहाँ f कतार का अगला भाग है, r विपरीत क्रम में कतार का पिछला भाग है। संरचना का अपरिवर्तनीय यह है कि एस इसके बिना एफ के पीछे है पहला तत्व, अर्थात् . कतार की पूँछ तब लगभग है एवं एक तत्व x को सम्मिलित करना लगभग है . ऐसा लगभग इसलिए कहा जाता है, क्योंकि उन दोनों परिणामों में, . एक सहायक कार्य फिर संतुष्ट होने के लिए अपरिवर्तनीय को बुलाया जाना चाहिए। इस पर निर्भर करते हुए दो स्थितियों पर विचार किया जाना चाहिए खाली सूची है, किस स्थितियों में , या नहीं। औपचारिक परिभाषा है एवं कहाँ f के पश्चात r का विपरीत होता है।

चलो फोन करते हैं फ़ंक्शन जो f के पश्चात r देता है, विपरीत होता है। चलिए यह भी मान लेते हैं , क्योंकि यह वह स्थिति है जब इस फ़ंक्शन को कॉल किया जाता है। अधिक त्रुटिहीन रूप से, हम एक मंद कार्य को परिभाषित करते हैं जो इनपुट तीन सूची के रूप में लेता है , एवं r का विपरीत एवं a का f का संयोजन लौटाता है। तब .घुमाने की आगमनात्मक परिभाषा है एवं . इसके चलने का समय है , लेकिन, चूंकि मंद मूल्यांकन का उपयोग किया जाता है, गणना तब तक विलंबित होती है जब तक कि गणना द्वारा परिणाम को मजबूर नहीं किया जाता है।

डेटा संरचना में सूची के दो उद्देश्य हैं। यह सूची काउंटर के रूप में कार्य करती है , वास्तव में, यदि एवं सिर्फ यदि खाली सूची है। यह काउंटर हमें यह सुनिश्चित करने की अनुमति देता है कि पिछला कभी भी सामने की सूची से अधिक लंबा न हो। इसके अतिरिक्त, एस का उपयोग करना, जो कि एफ की पूंछ है, प्रत्येक पूंछ के समय (मंद) सूची एफ के एक हिस्से की गणना को मजबूर करता है एवं संचालन सम्मिलित करता है। इसलिए कब , सूची f पूरी प्रकार से मजबूर है। यदि ऐसा नहीं होता, तो f का आंतरिक प्रतिनिधित्व का कुछ परिशिष्ट हो सकता है, एवं बल लगाना अब एक निरंतर समय संचालन नहीं होता है।

यह भी देखें

  • परिपत्र प्रतिरोधी
  • दोनों ओर से समान कतार (डीक्यू)
  • प्राथमिकता कतार
  • कतार सिद्धांत
  • ढेर (अमूर्त डेटा प्रकार) - कतार के विपरीत: लीफ़ो (लास्ट इन फ़र्स्ट आउट)

संदर्भ

  1. "Queue (Java Platform SE 7)". Docs.oracle.com. 2014-03-26. Retrieved 2014-05-22.
  2. "Array (Ruby 3.1)". 2021-12-25. Retrieved 2022-05-11.
  3. Okasaki, Chris. "विशुद्ध रूप से कार्यात्मक डेटा संरचनाएं" (PDF).
  4. Hood, Robert; Melville, Robert (November 1981). "शुद्ध लिस्प में रीयल-टाइम कतार संचालन". Information Processing Letters. 13 (2): 50–54. doi:10.1016/0020-0190(81)90030-2. hdl:1813/6273.



सामान्यतः संदर्भ

अग्रिम पठन


बाहरी संबंध