डेटा संरचना (Data Structure) कंप्यूटर मेमोरी में डेटा को व्यवस्थित, संसाधित, पुनः प्राप्त और संग्रहीत करने का एक विशेष प्रारूप है ताकि विभिन्न संक्रियाएं न्यूनतम समय में कुशलतापूर्वक निष्पादित की जा सकें। केवल एल्गोरिदम लिखना पर्याप्त नहीं है; एल्गोरिदम की वास्तविक गति डेटा संरचना की उपयुक्तता पर निर्भर करती है।
उपयुक्त डेटा संरचना के चयन हेतु तीन मुख्य कारक हैं: (1) डेटा की मात्रा एवं उनका आपसी संबंध, (2) बुनियादी ऑपरेशनों की आवृत्ति (जैसे खोजना, जोड़ना, हटाना), और (3) हार्डवेयर संसाधन (सीपीयू समय एवं मुख्य मेमोरी की खपत)।
डेटा संरचनाओं को मुख्य रूप से दो श्रेणियों में बांटा गया है:
- प्रिमिटिव डेटा संरचनाएं: वे बुनियादी डेटा प्रकार जो सीधे कंप्यूटर हार्डवेयर और मशीन निर्देशों द्वारा समर्थित होते हैं। C भाषा में
int,float,char,doubleऔर पॉइंटर्स इसके उदाहरण हैं। ये किसी भी समय केवल एक परमाणु (atomic) मान रखते हैं। - नॉन-प्रिमिटिव डेटा संरचनाएं: समरूप या विषम डेटा तत्वों के समूह को व्यवस्थित करने के लिए प्रिमिटिव प्रकारों से निर्मित जटिल संरचनाएं। इन्हें पुनः दो वर्गों में विभाजित किया गया है:
| वर्गीकरण श्रेणी | संरचनात्मक विशेषताएं | प्रमुख उदाहरण | ट्रैवर्सल प्रणाली |
|---|---|---|---|
| लीनियर (रैखिक) डेटा संरचना | तत्व एक अनुक्रमिक क्रम में व्यवस्थित होते हैं; प्रत्येक तत्व का एक निश्चित पूर्ववर्ती और उत्तरवर्ती होता है। | ऐरे, स्टैक, क्यू, लिंक्ड लिस्ट | एक ही रैखिक पास में सभी तत्वों को $O(n)$ समय में देखा जा सकता है। |
| नॉन-लीनियर (गैर-रैखिक) संरचना | तत्व अनुक्रमिक न होकर पदानुक्रमित (Hierarchical) या बहु-शाखा नेटवर्क के रूप में होते हैं। | ट्री (बाइनरी ट्री, BST), ग्राफ | जटिल बहु-शाखा ट्रैवर्सल (DFS, BFS, इनऑर्डर, प्रीऑर्डर)। |
| स्टैटिक संरचनाएं | कंपाइल समय पर मेमोरी का आकार निश्चित हो जाता है; रनटाइम पर आकार बदला नहीं जा सकता। | निश्चित आकार के ऐरे | स्टैक या डेटा सेगमेंट में मेमोरी आवंटित होती है। |
| डायनेमिक संरचनाएं | प्रोग्राम निष्पादन के दौरान हीप मेमोरी से आवश्यकतानुसार मेमोरी ली और छोड़ी जाती है। | लिंक्ड लिस्ट, डायनेमिक स्टैक | malloc() और free() द्वारा आकार घटता-बढ़ता है। |
सभी डेटा संरचनाओं पर निम्नलिखित छह बुनियादी संक्रियाएं की जाती हैं:
- ट्रैवर्सिंग (Traversing): संरचना के प्रत्येक तत्व को कम से कम एक बार एक्सेस और प्रोसेस करना (जैसे सभी तत्वों को प्रिंट करना)।
- इंसर्शन (Insertion): संरचना में किसी निश्चित स्थान पर नया डेटा तत्व जोड़ना।
- डिलिशन (Deletion): संरचना से किसी मौजूदा तत्व को हटाना।
- सर्चिंग (Searching): दी गई 'की' (Key) के आधार पर किसी तत्व का स्थान खोजना (लीनियर व बाइनरी सर्च)।
- सॉर्टिंग (Sorting): तत्वों को किसी निश्चित क्रम (आरोही या अवरोही) में व्यवस्थित करना।
- मर्जिंग (Merging): दो अलग-अलग सॉर्ट की गई सूचियों को मिलाकर एक संयुक्त सूची बनाना।