संग्रह (सार डेटा प्रकार): Difference between revisions

From Vigyanwiki
(Created page with "{{refimprove|date=October 2014}} कंप्यूटर प्रोग्रामिंग में, एक संग्रह डेटा आइटम्स (स...")
 
No edit summary
Line 1: Line 1:
{{refimprove|date=October 2014}}
कंप्यूटर प्रोग्रामिंग में,  संग्रह डेटा आइटम (संभवतः शून्य) की कुछ परिवर्ती  संख्या का एक समूह है, जिसका हल की जा रही समस्या के लिए कुछ साझा महत्व है और कुछ नियंत्रित तरीके से एक साथ संचालित करने की आवश्यकता है। सामान्य रूप से, डेटा आइटम समान प्रकार के होंगे या इन्हेरिटेन्स का समर्थन करने वाली भाषाओं में, कुछ सामान्य एन्सेस्टर प्रकार से प्राप्त होंगे। संग्रह अमूर्त डेटा प्रकारों पर प्रयुक्त एक अवधारणा है, और ठोस डेटा संरचना के रूप में एक विशिष्ट कार्यान्वयन निर्धारित नहीं करता है, हालांकि प्रायः एक सांकेतिक  (प्ररूप सिद्धांत  विचार-विमर्श के लिए कंटेनर देखें) चयन होता है।


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


संग्रह के उदाहरणों में [[सूची (सार डेटा प्रकार)]], [[सेट (कंप्यूटर विज्ञान)]], [[मल्टीसेट]], ट्री (डेटा संरचना) और ग्राफ़ (डेटा संरचना) शामिल हैं।
निश्चित आकार की सरणियों (या सारणियों) को सामान्य रूप से एक संग्रह नहीं माना जाता है क्योंकि वे निश्चित संख्या में डेटा आइटम रखते हैं, हालांकि वे सामान्य रूप से संग्रह के कार्यान्वयन में एक भूमिका निभाते हैं। चर-आकार सरणियों को सामान्य रूप से संग्रह माना जाता है।{{citation needed|date=April 2016}}


निश्चित आकार की सरणियों (या तालिकाओं) को आमतौर पर एक संग्रह नहीं माना जाता है क्योंकि वे निश्चित संख्या में डेटा आइटम रखते हैं, हालांकि वे आमतौर पर संग्रह के कार्यान्वयन में एक भूमिका निभाते हैं। चर-आकार सरणियों को आम तौर पर संग्रह माना जाता है।{{citation needed|date=April 2016}}
== रैखिक संग्रह ==
{{also|रैखिक डेटा संरचना}}


== रैखिक संग्रह ==
कई संग्रह एक या दोनों सिरों तक अभिगम के साथ एक विशेष रैखिक क्रम को परिभाषित करते हैं। इस तरह के संग्रह को प्रयुक्त करने वाली वास्तविक डेटा संरचना को रैखिक होने की आवश्यकता नहीं है - उदाहरण के लिए, एक [[प्राथमिकता कतार|प्राथमिकता क्यू]] को प्रायः हीप (डेटा संरचना) के रूप में प्रयुक्त किया जाता है, जो एक प्रकार का ट्री है। महत्वपूर्ण रैखिक संग्रह में सम्मिलित हैं:
{{also|Linear data structure}}
* सूची (अमूर्त डेटा प्रकार);
कई संग्रह एक या दोनों सिरों तक पहुंच के साथ एक विशेष रैखिक क्रम को परिभाषित करते हैं। इस तरह के संग्रह को लागू करने वाली वास्तविक डेटा संरचना को रैखिक होने की आवश्यकता नहीं है - उदाहरण के लिए, एक [[प्राथमिकता कतार]] को अक्सर हीप (डेटा संरचना) के रूप में लागू किया जाता है, जो एक प्रकार का पेड़ है। महत्वपूर्ण रैखिक संग्रह में शामिल हैं:
* स्टैक (अमूर्त डेटा प्रकार);
* सूची (सार डेटा प्रकार);
* [[कतार (सार डेटा प्रकार)|क्यू (अमूर्त डेटा प्रकार)]];
* ढेर (अमूर्त डेटा प्रकार);
* प्राथमिकता क्यू;
* [[कतार (सार डेटा प्रकार)]];
* डबल-एंडेड क्यू;
* प्राथमिकता कतार;
* डबल-एंडेड (द्विमुखी) प्राथमिकता क्यू।
* [[डबल-एंडेड कतार]]|डबल-एंडेड कतार;
* [[डबल-एंडेड प्राथमिकता कतार]] | डबल-एंडेड प्राथमिकता कतार।


=== सूची ===
=== सूची ===
{{main|List (abstract data type)}}
{{main|सूची (अमूर्त डाटा प्रकार)}}
किसी सूची में, डेटा आइटम्स का क्रम महत्वपूर्ण होता है। डुप्लिकेट डेटा आइटम की अनुमति है। सूचियों पर संचालन के उदाहरण सूची में डेटा आइटम की खोज करना और उसका स्थान निर्धारित करना (यदि वह मौजूद है), सूची से डेटा आइटम को हटाना, किसी विशिष्ट स्थान पर सूची में डेटा आइटम जोड़ना आदि। सूची में संचालन एक छोर पर डेटा आइटम के अतिरिक्त और दूसरे पर डेटा आइटम को हटाने के लिए होता है, इसे आम तौर पर क्यू (डेटा संरचना) या [[फीफो (कंप्यूटिंग और इलेक्ट्रॉनिक्स)]] कहा जाएगा। यदि मुख्य ऑपरेशन केवल एक छोर पर डेटा आइटम को जोड़ना और हटाना है, तो इसे स्टैक (डेटा संरचना) या LIFO (कंप्यूटिंग) कहा जाएगा। दोनों ही मामलों में, डेटा आइटम संग्रह के भीतर एक ही क्रम में बनाए रखा जाता है (जब तक कि उन्हें हटाया नहीं जाता है और कहीं और फिर से डाला जाता है) और इसलिए ये सूची संग्रह के विशेष मामले हैं। सूचियों पर अन्य विशेष संचालन में छँटाई शामिल है, जहाँ, फिर से, डेटा वस्तुओं का क्रम बहुत महत्वपूर्ण है।
 
किसी सूची में, डेटा आइटम का क्रम महत्वपूर्ण होता है। प्रतिलिपि डेटा आइटम की स्वीकृति है। सूचियों पर संचालन के उदाहरण सूची में डेटा आइटम की खोज करना और उसका स्थान (यदि वह सम्मिलित है) निर्धारित करना, सूची से डेटा आइटम को हटाना, किसी विशिष्ट स्थान पर सूची में डेटा आइटम जोड़ना आदि सम्मिलित है। सूची में संचालन एक सिरे पर डेटा आइटम के अतिरिक्त और दूसरे पर डेटा आइटम को हटाने के लिए होता है, इसे सामान्य रूप से क्यू (डेटा संरचना) या [[फीफो (कंप्यूटिंग और इलेक्ट्रॉनिक्स)]] कहा जाएगा। यदि मुख्य ऑपरेशन केवल एक सिरे पर डेटा आइटम को जोड़ना और हटाना है, तो इसे स्टैक (डेटा संरचना) या एलआईएफओ (कंप्यूटिंग) कहा जाएगा। दोनों ही स्थितियों में, डेटा आइटम संग्रह के अंदर समान क्रम में बनाए रखा जाता है (जब तक कि उन्हें हटाया नहीं जाता है और कहीं और पुनः निर्दिष्ट किया जाता है) और इसलिए ये सूची संग्रह के विशेष स्थिति हैं। सूचियों पर अन्य विशेष संचालन में वर्गीकरण सम्मिलित है, जहाँ, पुनः, डेटा वस्तुओं का क्रम बहुत महत्वपूर्ण है।
 
=== स्टैक ===
{{main|स्टैक (अमूर्त डेटा प्रकार)}}


=== ढेर ===
स्टैक एक एलआईएफओ डेटा संरचना है जिसमें दो प्रमुख संचालन होते हैं: पुश, जो संग्रह के "शीर्ष" में एक तत्व जोड़ता है, और पॉप, जो शीर्ष तत्व को हटा देता है।
{{main|Stack (abstract data type)}}
एक ढेर एक एलआईएफओ डेटा संरचना है जिसमें दो प्रमुख संचालन होते हैं: धक्का, जो संग्रह के शीर्ष पर एक तत्व जोड़ता है, और पॉप, जो शीर्ष तत्व को हटा देता है।


=== पूंछ ===
=== पूंछ ===
{{main|Queue (abstract data type)}}
{{main|क्यू (अमूर्त डेटा प्रकार)}}


=== प्राथमिकता कतार ===
=== प्राथमिकता क्यू ===
{{main|Priority queue}}
{{main|प्राथमिकता क्यू}}
एक प्राथमिकता कतार में, संग्रह में न्यूनतम या अधिकतम डेटा आइटम के ट्रैक कुछ ऑर्डरिंग मानदंड के अनुसार रखे जाते हैं, और अन्य डेटा आइटम के क्रम में कोई फर्क नहीं पड़ता। एक प्राथमिकता कतार को एक सूची के रूप में सोच सकते हैं जो हमेशा न्यूनतम या अधिकतम सिर पर रखती है, जबकि शेष तत्वों को एक बैग में रखा जाता है।
 
प्राथमिकता क्यू में, संग्रह में न्यूनतम या अधिकतम डेटा आइटम के पथ कुछ क्रमीकरण मानक के अनुसार रखे जाते हैं, औरऔर अन्य डेटा आइटम्स का क्रम कोई प्रयोजन नहीं रखता है। एक प्राथमिकता क्यू को एक सूची के रूप में विचार कर सकते हैं जो सदैव न्यूनतम या अधिकतम शीर्ष पर रखती है, जबकि शेष तत्वों को एक बैग में रखा जाता है।


=== डबल-एंडेड क्यू ===
=== डबल-एंडेड क्यू ===
{{main|Double-ended queue}}
{{main|डबल-एंडेड क्यू}}


=== डबल-एंडेड प्राथमिकता कतार ===
=== डबल-एंडेड उत्कृष्टता क्यू ===
{{main|Double-ended priority queue}}
{{main|डबल-एंडेड उत्कृष्टता क्यू}}


== साहचर्य संग्रह ==
== साहचर्य संग्रह ==
इसके बजाय अन्य संग्रहों को एक प्रकार के कार्य के रूप में व्याख्या किया जा सकता है: एक इनपुट दिए जाने पर, संग्रह एक आउटपुट उत्पन्न करता है। महत्वपूर्ण साहचर्य संग्रह में शामिल हैं:
इसके अतिरिक्त अन्य संग्रहों को एक प्रकार के फ़ंक्शन के रूप में व्याख्या किया जा सकता है: एक इनपुट दिए जाने पर, संग्रह एक आउटपुट उत्पन्न करता है। महत्वपूर्ण साहचर्य संग्रह में सम्मिलित हैं:
* सेट (कंप्यूटर विज्ञान);
* सेट (कंप्यूटर विज्ञान)
* [[मल्टीसेट (अमूर्त डेटा प्रकार)]];
* [[मल्टीसेट (अमूर्त डेटा प्रकार)|मल्टीसेट; (अमूर्त डेटा प्रकार)]];
* सहयोगी सरणी।
* साहचर्य सरणियाँ।
एक सेट को एक विशेष मल्टीसेट के रूप में व्याख्या किया जा सकता है, जो बदले में एक विशेष [[साहचर्य सरणी]] है, प्रत्येक मामले में संभावित मूल्यों को सीमित करके - एक सेट को इसके संकेतक फ़ंक्शन द्वारा दर्शाया गया है।
एक सेट को एक विशेष मल्टीसेट के रूप में व्याख्या किया जा सकता है, जो बदले में एक विशेष [[साहचर्य सरणी]] है, प्रत्येक स्थिति में संभावित मान को सीमित करके - एक सेट को इसके संकेतक फ़ंक्शन द्वारा दर्शाया गया है।
 
=== सेट edit ===
{{main|सेट (कंप्यूटर विज्ञान)}}


=== सेट ===
एक सेट में, डेटा आइटम का क्रम मायने नहीं रखता (या अपरिभाषित है) लेकिन प्रतिलिपि डेटा आइटम की स्वीकृति नहीं है। सेट पर संचालन के उदाहरण डेटा आइटम को जोड़ना और हटाना और सेट में डेटा आइटम की खोज करना है। कुछ भाषाएँ सीधे सेट का समर्थन करती हैं। दूसरों में, सेट को [[हैश तालिका]] द्वारा डमी मानों के साथ प्रयुक्त किया जा सकता है; सेट का प्रतिनिधित्व करने के लिए केवल कुंजियों का उपयोग किया जाता है।
{{main|Set (computer science)}}
एक सेट में, डेटा आइटम का क्रम मायने नहीं रखता (या अपरिभाषित है) लेकिन डुप्लिकेट डेटा आइटम की अनुमति नहीं है। सेट पर संचालन के उदाहरण डेटा आइटम को जोड़ना और हटाना और सेट में डेटा आइटम की खोज करना है। कुछ भाषाएँ सीधे सेट का समर्थन करती हैं। दूसरों में, सेट को [[हैश तालिका]] द्वारा डमी मानों के साथ लागू किया जा सकता है; सेट का प्रतिनिधित्व करने के लिए केवल कुंजियों का उपयोग किया जाता है।


=== मल्टीसेट्स ===
=== मल्टीसेट्स ===
{{main|Multiset (abstract data type)}}
{{main|Multiset (abstract data type)}}
एक मल्टीसेट (या बैग) में, एक सेट की तरह, डेटा आइटम का क्रम मायने नहीं रखता है, लेकिन इस मामले में डुप्लिकेट डेटा आइटम की अनुमति है। मल्टीसेट पर संचालन के उदाहरण डेटा आइटम्स को जोड़ना और हटाना और यह निर्धारित करना है कि मल्टीसेट में किसी विशेष डेटा आइटम के कितने डुप्लिकेट मौजूद हैं। छँटाई की क्रिया द्वारा मल्टीसेट को सूचियों में बदला जा सकता है।
एक मल्टीसेट (या बैग) में, एक सेट की तरह, डेटा आइटम का क्रम मायने नहीं रखता है, लेकिन इस स्थिति में प्रतिलिपि डेटा आइटम की स्वीकृति है। मल्टीसेट पर संचालन के उदाहरण डेटा आइटम को जोड़ना और हटाना और यह निर्धारित करना है कि मल्टीसेट में किसी विशेष डेटा आइटम के कितने प्रतिलिपि सम्मिलित हैं। छँटाई की क्रिया द्वारा मल्टीसेट को सूचियों में बदला जा सकता है।


=== साहचर्य सरणियाँ ===
=== साहचर्य सरणियाँ ===
{{Main|Associative array}}
{{Main|Associative array}}
एक साहचर्य सरणी (या मानचित्र, शब्दकोश, लुकअप टेबल) में, एक शब्दकोश की तरह, एक कुंजी पर एक लुकअप (एक शब्द की तरह) एक मान प्रदान करता है (एक परिभाषा की तरह)। मान एक यौगिक डेटा संरचना का संदर्भ हो सकता है। एक हैश तालिका आमतौर पर एक कुशल कार्यान्वयन होती है, और इस प्रकार इस डेटा प्रकार को अक्सर हैश के रूप में जाना जाता है।
एक साहचर्य सरणी (या मानचित्र, शब्दकोश, लुकअप टेबल) में, एक शब्दकोश की तरह, एक कुंजी पर एक लुकअप (एक शब्द की तरह) एक मान प्रदान करता है (एक परिभाषा की तरह)। मान एक यौगिक डेटा संरचना का संदर्भ हो सकता है। एक हैश तालिका सामान्य रूप से एक कुशल कार्यान्वयन होती है, और इस प्रकार इस डेटा प्रकार को प्रायः हैश के रूप में जाना जाता है।


== रेखांकन ==
== रेखांकन ==
{{Main|Graph (abstract data type)}}
{{Main|Graph (abstract data type)}}
एक ग्राफ़ में, डेटा आइटम संग्रह में एक या अधिक अन्य डेटा आइटम के साथ जुड़ाव रखते हैं और कुछ हद तक जड़ या माता-पिता के रिश्ते की अवधारणा के बिना पेड़ों की तरह होते हैं ताकि सभी डेटा आइटम सहकर्मी हों। ग्राफ़ पर संचालन के उदाहरण ट्रैवर्सल और खोज हैं जो कुछ विशिष्ट संपत्ति की तलाश में डेटा आइटम के संघों का पता लगाते हैं। रेखांकन का उपयोग अक्सर वास्तविक दुनिया की स्थितियों को मॉडल करने और संबंधित समस्याओं को हल करने के लिए किया जाता है। एक उदाहरण [[ स्पेनिंग ट्री प्रोटोकॉल ]] है, जो एक डेटा नेटवर्क का एक ग्राफ (या मेश) प्रतिनिधित्व बनाता है और यह पता लगाता है कि स्विचिंग नोड्स के बीच कौन से संघों को इसे ट्री में बदलने के लिए तोड़ा जाना चाहिए और इस प्रकार डेटा को लूप में जाने से रोकता है।
एक ग्राफ़ में, डेटा आइटम संग्रह में एक या अधिक अन्य डेटा आइटम के साथ जुड़ाव रखते हैं और कुछ हद तक जड़ या माता-पिता के रिश्ते की अवधारणा के बिना पेड़ों की तरह होते हैं ताकि सभी डेटा आइटम सहकर्मी हों। ग्राफ़ पर संचालन के उदाहरण ट्रैवर्सल और खोज हैं जो कुछ विशिष्ट संपत्ति की तलाश में डेटा आइटम के संघों का पता लगाते हैं। रेखांकन का उपयोग प्रायः वास्तविक दुनिया की स्थितियों को मॉडल करने और संबंधित समस्याओं को हल करने के लिए किया जाता है। एक उदाहरण [[ स्पेनिंग ट्री प्रोटोकॉल ]] है, जो एक डेटा नेटवर्क का एक ग्राफ (या मेश) प्रतिनिधित्व बनाता है और यह पता लगाता है कि स्विचिंग नोड्स के बीच कौन से संघों को इसे ट्री में बदलने के लिए तोड़ा जाना चाहिए और इस प्रकार डेटा को लूप में जाने से रोकता है।


=== पेड़ ===
=== ट्री ===
{{main|Tree (data structure)|}}
{{main|Tree (data structure)|}}
एक पेड़ में, जो एक विशेष प्रकार का ग्राफ है, एक रूट डेटा आइटम ने इसके साथ कुछ डेटा आइटम जोड़े हैं, जो बदले में उनके साथ कुछ अन्य डेटा आइटम से जुड़े हैं, जिन्हें अक्सर माता-पिता के रिश्ते के रूप में देखा जाता है। प्रत्येक डेटा आइटम (रूट के अलावा) में एक एकल माता-पिता (रूट का कोई माता-पिता नहीं है) और कुछ संख्या में बच्चे, संभवतः शून्य हैं। पेड़ों पर संचालन के उदाहरण डेटा आइटम्स को जोड़ना है ताकि सॉर्टिंग आदि करने के लिए ट्री की एक विशिष्ट संपत्ति को बनाए रखा जा सके और एक विशिष्ट क्रम में डेटा आइटम्स को देखने के लिए ट्रैवर्सल किया जा सके।
एक ट्री में, जो एक विशेष प्रकार का ग्राफ है, एक रूट डेटा आइटम ने इसके साथ कुछ डेटा आइटम जोड़े हैं, जो बदले में उनके साथ कुछ अन्य डेटा आइटम से जुड़े हैं, जिन्हें प्रायः माता-पिता के रिश्ते के रूप में देखा जाता है। प्रत्येक डेटा आइटम (रूट के अलावा) में एक एकल माता-पिता (रूट का कोई माता-पिता नहीं है) और कुछ संख्या में बच्चे, संभवतः शून्य हैं। पेड़ों पर संचालन के उदाहरण डेटा आइटम को जोड़ना है ताकि सॉर्टिंग आदि करने के लिए ट्री की एक विशिष्ट संपत्ति को बनाए रखा जा सके और एक विशिष्ट क्रम में डेटा आइटम को देखने के लिए ट्रैवर्सल किया जा सके।


वृक्ष संग्रह का उपयोग स्वाभाविक रूप से पदानुक्रमित डेटा को संग्रहीत करने के लिए किया जा सकता है, जो एक पेड़ की तरह तरीके से प्रस्तुत किया जाता है, जैसे मेनू सिस्टम और डेटा स्टोरेज सिस्टम पर निर्देशिकाओं में फ़ाइलें।
वृक्ष संग्रह का उपयोग स्वाभाविक रूप से पदानुक्रमित डेटा को संग्रहीत करने के लिए किया जा सकता है, जो एक ट्री की तरह तरीके से प्रस्तुत किया जाता है, जैसे मेनू सिस्टम और डेटा स्टोरेज सिस्टम पर निर्देशिकाओं में फ़ाइलें।


विशिष्ट पेड़ों का उपयोग विभिन्न एल्गोरिदम में किया जाता है। उदाहरण के लिए, [[ ढेर बनाएं और छांटें ]] एक प्रकार के पेड़ का उपयोग करता है जिसे हीप (डेटा संरचना) कहा जाता है।
विशिष्ट पेड़ों का उपयोग विभिन्न एल्गोरिदम में किया जाता है। उदाहरण के लिए, [[ ढेर बनाएं और छांटें | स्टैक बनाएं और छांटें]] एक प्रकार के ट्री का उपयोग करता है जिसे हीप (डेटा संरचना) कहा जाता है।


== सार अवधारणा बनाम कार्यान्वयन ==
== अमूर्त अवधारणा बनाम कार्यान्वयन ==
जैसा कि यहां बताया गया है, एक संग्रह और विभिन्न प्रकार के संग्रह अमूर्त अवधारणाएं हैं। कंप्यूटर विज्ञान की अमूर्त अवधारणाओं और विभिन्न भाषाओं या भाषाओं के प्रकारों में उनके विशिष्ट कार्यान्वयन के बीच साहित्य में काफी भ्रम मौजूद है। यह दावा कि सूचियों, सेटों, पेड़ों आदि जैसे संग्रह डेटा संरचनाएं हैं, सार डेटा प्रकार या कक्षाएं इसे ध्यान में रखकर पढ़ी जानी चाहिए। संग्रह सबसे पहले और सबसे महत्वपूर्ण सार हैं जो कंप्यूटिंग समस्याओं के समाधान तैयार करने में उपयोगी होते हैं। इस प्रकाश में देखे जाने पर, वे अंतर्निहित गणितीय अवधारणाओं के लिए महत्वपूर्ण लिंक बनाए रखते हैं जो कार्यान्वयन पर ध्यान केंद्रित करने पर खो सकते हैं।
जैसा कि यहां बताया गया है, एक संग्रह और विभिन्न प्रकार के संग्रह अमूर्त अवधारणाएं हैं। कंप्यूटर विज्ञान की अमूर्त अवधारणाओं और विभिन्न भाषाओं या भाषाओं के प्रकारों में उनके विशिष्ट कार्यान्वयन के बीच साहित्य में काफी भ्रम सम्मिलित है। यह दावा कि सूचियों, सेटों, पेड़ों आदि जैसे संग्रह डेटा संरचनाएं हैं, अमूर्त डेटा प्रकार या कक्षाएं इसे ध्यान में रखकर पढ़ी जानी चाहिए। संग्रह सबसे पहले और सबसे महत्वपूर्ण अमूर्त हैं जो कंप्यूटिंग समस्याओं के समाधान तैयार करने में उपयोगी होते हैं। इस प्रकाश में देखे जाने पर, वे अंतर्निहित गणितीय अवधारणाओं के लिए महत्वपूर्ण लिंक बनाए रखते हैं जो कार्यान्वयन पर ध्यान केंद्रित करने पर खो सकते हैं।


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


== कार्यान्वयन ==
== कार्यान्वयन ==
कुछ संग्रह किसी भाषा में [[आदिम डेटा प्रकार]] हो सकते हैं, जैसे कि सूचियाँ, जबकि अधिक जटिल संग्रह पुस्तकालयों में मिश्रित डेटा प्रकारों के रूप में कार्यान्वित किए जाते हैं, कभी-कभी [[मानक पुस्तकालय]] में। उदाहरणों में शामिल:
कुछ संग्रह किसी भाषा में [[आदिम डेटा प्रकार]] हो सकते हैं, जैसे कि सूचियाँ, जबकि अधिक जटिल संग्रह पुस्तकालयों में मिश्रित डेटा प्रकारों के रूप में कार्यान्वित किए जाते हैं, कभी-कभी [[मानक पुस्तकालय]] में। उदाहरणों में सम्मिलित:


* सी ++: [[कंटेनर (सार डेटा प्रकार)]] के रूप में जाना जाता है, सी ++ मानक लाइब्रेरी और पहले [[मानक टेम्पलेट लाइब्रेरी]] में लागू किया गया
* सी ++: [[कंटेनर (सार डेटा प्रकार)|कंटेनर (अमूर्त डेटा प्रकार)]] के रूप में जाना जाता है, सी ++ मानक लाइब्रेरी और पहले [[मानक टेम्पलेट लाइब्रेरी]] में प्रयुक्त किया गया
* जावा: जावा संग्रह ढांचे में लागू किया गया
* जावा: जावा संग्रह ढांचे में प्रयुक्त किया गया
* ओरेकल पीएल/एसक्यूएल संग्रह को प्रोग्रामर परिभाषित प्रकारों के रूप में लागू करता है<ref>
* ओरेकल पीएल/एसक्यूएल संग्रह को प्रोग्रामर परिभाषित प्रकारों के रूप में प्रयुक्त करता है<ref>
{{cite book
{{cite book
| last1 = Feuerstein
| last1 = Feuerstein

Revision as of 22:45, 17 May 2023

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

संग्रह के उदाहरणों में सूची (अमूर्त डेटा प्रकार), समुच्चय (कंप्यूटर विज्ञान), बहु-समुच्चय, ट्री (डेटा संरचना) और ग्राफ़ (डेटा संरचना) सम्मिलित हैं।

निश्चित आकार की सरणियों (या सारणियों) को सामान्य रूप से एक संग्रह नहीं माना जाता है क्योंकि वे निश्चित संख्या में डेटा आइटम रखते हैं, हालांकि वे सामान्य रूप से संग्रह के कार्यान्वयन में एक भूमिका निभाते हैं। चर-आकार सरणियों को सामान्य रूप से संग्रह माना जाता है।[citation needed]

रैखिक संग्रह

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

  • सूची (अमूर्त डेटा प्रकार);
  • स्टैक (अमूर्त डेटा प्रकार);
  • क्यू (अमूर्त डेटा प्रकार);
  • प्राथमिकता क्यू;
  • डबल-एंडेड क्यू;
  • डबल-एंडेड (द्विमुखी) प्राथमिकता क्यू।

सूची

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

स्टैक

स्टैक एक एलआईएफओ डेटा संरचना है जिसमें दो प्रमुख संचालन होते हैं: पुश, जो संग्रह के "शीर्ष" में एक तत्व जोड़ता है, और पॉप, जो शीर्ष तत्व को हटा देता है।

पूंछ

प्राथमिकता क्यू

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

डबल-एंडेड क्यू

डबल-एंडेड उत्कृष्टता क्यू

साहचर्य संग्रह

इसके अतिरिक्त अन्य संग्रहों को एक प्रकार के फ़ंक्शन के रूप में व्याख्या किया जा सकता है: एक इनपुट दिए जाने पर, संग्रह एक आउटपुट उत्पन्न करता है। महत्वपूर्ण साहचर्य संग्रह में सम्मिलित हैं:

एक सेट को एक विशेष मल्टीसेट के रूप में व्याख्या किया जा सकता है, जो बदले में एक विशेष साहचर्य सरणी है, प्रत्येक स्थिति में संभावित मान को सीमित करके - एक सेट को इसके संकेतक फ़ंक्शन द्वारा दर्शाया गया है।

सेट edit

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

मल्टीसेट्स

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

साहचर्य सरणियाँ

एक साहचर्य सरणी (या मानचित्र, शब्दकोश, लुकअप टेबल) में, एक शब्दकोश की तरह, एक कुंजी पर एक लुकअप (एक शब्द की तरह) एक मान प्रदान करता है (एक परिभाषा की तरह)। मान एक यौगिक डेटा संरचना का संदर्भ हो सकता है। एक हैश तालिका सामान्य रूप से एक कुशल कार्यान्वयन होती है, और इस प्रकार इस डेटा प्रकार को प्रायः हैश के रूप में जाना जाता है।

रेखांकन

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

ट्री

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

वृक्ष संग्रह का उपयोग स्वाभाविक रूप से पदानुक्रमित डेटा को संग्रहीत करने के लिए किया जा सकता है, जो एक ट्री की तरह तरीके से प्रस्तुत किया जाता है, जैसे मेनू सिस्टम और डेटा स्टोरेज सिस्टम पर निर्देशिकाओं में फ़ाइलें।

विशिष्ट पेड़ों का उपयोग विभिन्न एल्गोरिदम में किया जाता है। उदाहरण के लिए, स्टैक बनाएं और छांटें एक प्रकार के ट्री का उपयोग करता है जिसे हीप (डेटा संरचना) कहा जाता है।

अमूर्त अवधारणा बनाम कार्यान्वयन

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

उदाहरण के लिए, एक प्राथमिकता क्यू को प्रायः स्टैक के रूप में प्रयुक्त किया जाता है, जबकि एक साहचर्य सरणी को प्रायः हैश तालिका के रूप में कार्यान्वित किया जाता है, इसलिए इन अमूर्त प्रकारों को प्रायः इस पसंदीदा कार्यान्वयन द्वारा हीप या हैश के रूप में संदर्भित किया जाता है, हालांकि यह कड़ाई से नहीं है सही।

कार्यान्वयन

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

  • सी ++: कंटेनर (अमूर्त डेटा प्रकार) के रूप में जाना जाता है, सी ++ मानक लाइब्रेरी और पहले मानक टेम्पलेट लाइब्रेरी में प्रयुक्त किया गया
  • जावा: जावा संग्रह ढांचे में प्रयुक्त किया गया
  • ओरेकल पीएल/एसक्यूएल संग्रह को प्रोग्रामर परिभाषित प्रकारों के रूप में प्रयुक्त करता है[1]
  • पायथन: कुछ अंतर्निहित, अन्य संग्रह पुस्तकालय में कार्यान्वित

संदर्भ

  1. Feuerstein, Steven; Pribyl, Bill; Dawes, Chip (2007) [1999]. "Collections in PL/SQL". Oracle PL/SQL Language Pocket Reference. Pocket Reference (4 ed.). Sebastopol, California: O'Reilly Media, Inc. p. 63. ISBN 9780596551612. Retrieved 2017-06-26. Collections are implemented as TYPEs. As with any programmer-defined type, you must first define the type; then you can declare instances of that type.


बाहरी संबंध