संग्रह (सार डेटा प्रकार)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

बाहरी संबंध

 * Apache Commons Collections.
 * AS3Commons Collections Framework ActionScript3 implementation of the most common collections.
 * CollectionSpy &mdash; A profiler for Java's Collections Framework.
 * Guava.
 * Mango Java library.