डेटा संरचना

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

प्रयोग
डेटा संरचनाएं सार डेटा प्रकार (एडीटी) के आधार के रूप में कार्य करती हैं। एडीटी डेटा प्रकार के तार्किक रूप को परिभाषित करता है। डेटा संरचना डेटा प्रकार के भौतिक रूप को प्रयुक्त करती है।

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

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

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

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

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

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

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

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

कई ज्ञात डेटा संरचनाओं में समवर्ती डेटा संरचना संस्करण होते हैं जो एकाधिक कंप्यूटिंग थ्रेड्स को एक साथ डेटा संरचना के एक ठोस उदाहरण तक पहुंचने की अनुमति देते हैं।

यह भी देखें

 * सार डेटा प्रकार
 * समवर्ती डेटा संरचना
 * डेटा मॉडल
 * गतिशीलता
 * लिंक्ड डेटा संरचना
 * डेटा संरचनाओं की सूची
 * लगातार डेटा संरचना
 * सादा पुराना डेटा संरचना
 * queap
 * संक्षिप्त डेटा संरचना
 * ट्री (डेटा संरचना)

ग्रन्थसूची

 * Peter Brass, Advanced Data Structures, Cambridge University Press, 2008, ISBN 978-0521880374
 * Donald Knuth, The Art of Computer Programming, vol. 1. Addison-Wesley, 3rd edition, 1997, ISBN 978-0201896831
 * Dinesh Mehta and Sartaj Sahni, Handbook of Data Structures and Applications, Chapman and Hall/CRC Press, 2004, ISBN 1584884355
 * Niklaus Wirth, Algorithms and Data Structures, Prentice Hall, 1985, ISBN 978-0130220059

आगे की पढाई

 * Alfred Aho, John Hopcroft, and Jeffrey Ullman, Data Structures and Algorithms, Addison-Wesley, 1983, ISBN 0-201-00023-7
 * G. H. Gonnet and R. Baeza-Yates, Handbook of Algorithms and Data Structures - in Pascal and C, second edition, Addison-Wesley, 1991, ISBN 0-201-41607-7
 * Ellis Horowitz and Sartaj Sahni, Fundamentals of Data Structures in Pascal, Computer Science Press, 1984, ISBN 0-914894-94-3

बाहरी कड़ियाँ

 * Descriptions from the Dictionary of Algorithms and Data Structures
 * Data structures course
 * An Examination of Data Structures from .NET perspective
 * Schaffer, C. Data Structures and Algorithm Analysis