मूल रूप से, एक सरणी एक समान शीर्षक या एक चर नाम के तहत अनुक्रमिक स्मृति स्थानों में संग्रहीत समान डेटा ऑब्जेक्ट्स का एक सेट है।
जबकि लिंक्ड सूची एक डेटा संरचना है जिसमें तत्वों का एक क्रम होता है जहां प्रत्येक तत्व अपने अगले तत्व से जुड़ा होता है। लिंक की गई सूची के एक तत्व में दो फ़ील्ड हैं। एक डेटा फ़ील्ड है, और अन्य लिंक फ़ील्ड है, डेटा फ़ील्ड में संग्रहीत और संसाधित किए जाने वाले वास्तविक मूल्य शामिल हैं। इसके अलावा, लिंक फ़ील्ड लिंक की गई सूची में अगले डेटा आइटम का पता रखती है। किसी विशेष नोड तक पहुंचने के लिए उपयोग किए जाने वाले पते को एक पॉइंटर के रूप में जाना जाता है।
एक सरणी और लिंक की गई सूची के बीच एक और महत्वपूर्ण अंतर यह है कि एरे का एक निश्चित आकार है और पूर्व घोषित किए जाने की आवश्यकता है, लेकिन लिंक्ड सूची निष्पादन के दौरान आकार और विस्तार और अनुबंध के लिए प्रतिबंधित नहीं है।
तुलना चार्ट
तुलना के लिए आधार | सरणी | लिंक्ड सूची |
---|---|---|
बुनियादी | यह एक निश्चित संख्या में डेटा आइटम है। | यह एक ऑर्डर किया गया सेट है जिसमें डेटा आइटम की एक चर संख्या शामिल है। |
आकार | घोषणा के दौरान निर्दिष्ट। | निर्दिष्ट करने की आवश्यकता नहीं है; विकास और निष्पादन के दौरान सिकुड़ना। |
भंडारण आवंटन | संकलन समय के दौरान तत्व स्थान आवंटित किया जाता है। | रन टाइम के दौरान एलिमेंट पोजिशन असाइन की जाती है। |
तत्वों का क्रम | लगातार स्टोर किया | बेतरतीब ढंग से संग्रहीत |
तत्व तक पहुँचना | प्रत्यक्ष या बेतरतीब ढंग से पहुँचा, अर्थात्, सरणी सूचकांक या सबस्क्रिप्ट निर्दिष्ट करें। | क्रमिक रूप से एक्सेस किया जाता है, अर्थात, पॉइंटर द्वारा सूची में पहले नोड से शुरू होता है। |
तत्व का सम्मिलन और विलोपन | अपेक्षाकृत धीमी गति से स्थानांतरण की आवश्यकता होती है। | आसान, तेज और कुशल। |
खोज कर | बाइनरी खोज और रैखिक खोज | रैखिक खोज |
मेमोरी आवश्यक है | कम से | अधिक |
मेमोरी यूटिलाइजेशन | अप्रभावी | कुशल |
ऐरे की परिभाषा
एक सरणी को सजातीय तत्वों या डेटा आइटमों की एक निश्चित संख्या के रूप में परिभाषित किया गया है। इसका मतलब है कि एक सरणी में केवल एक प्रकार का डेटा हो सकता है, या तो सभी पूर्णांक, सभी फ़्लोटिंग-पॉइंट नंबर या सभी वर्ण। एक सरणी की घोषणा इस प्रकार है:
int [10];
जहां int डेटा प्रकार या तत्वों के प्रकार स्टोर को निर्दिष्ट करता है। "ए" एक ऐरे का नाम है, और वर्गाकार कोष्ठकों के अंदर निर्दिष्ट संख्या एक ऐरे स्टोर कर सकने वाले तत्वों की संख्या है, इसे ऐरे का आकार या लंबाई भी कहा जाता है।
आइए सरणियों के बारे में याद किए जाने वाली कुछ अवधारणाओं को देखें:
- एक सरणी के व्यक्तिगत तत्वों को वर्ग कोष्ठक के अंदर सूचकांक या सबस्क्रिप्ट (सरणी में तत्व के स्थान का निर्धारण) के बाद, सरणी के नाम का वर्णन करके पहुँचा जा सकता है। उदाहरण के लिए, सरणी के 5 वें तत्व को पुनः प्राप्त करने के लिए, हमें एक बयान [4] लिखना होगा।
- किसी भी स्थिति में एक सरणी के तत्वों को लगातार मेमोरी स्थान में संग्रहीत किया जाएगा।
- सरणी के पहले तत्व में इंडेक्स ज़ीरो [0] है। इसका अर्थ है कि पहला और अंतिम तत्व क्रमशः [0] और [9] के रूप में निर्दिष्ट किया जाएगा।
- उन तत्वों की संख्या जिन्हें किसी सरणी में संग्रहीत किया जा सकता है, अर्थात, किसी सरणी का आकार या उसकी लंबाई निम्नलिखित समीकरण द्वारा दी गई है:
(अपर बाउंड-लोअर बाउंड) + 1
उपरोक्त सरणी के लिए, यह (9-0) + 1 = 10 होगा। जहाँ 0 सरणी की निचली सीमा है, और 9 सरणी की ऊपरी सीमा है। - ऐरे को लूप के माध्यम से पढ़ा या लिखा जा सकता है। यदि हम एक-आयामी सरणी को पढ़ते हैं, तो इसे पढ़ने के लिए एक लूप की आवश्यकता होती है और अन्य लिखने के लिए (प्रिंटिंग) सरणी के लिए, उदाहरण के लिए:
ए। एक सरणी पढ़ने के लिए
के लिए (i = 0; मैं <= 9; मैं ++)
{स्कैनफ़ ("% d", और [i]); }
ख। एक सरणी लिखने के लिए
के लिए (i = 0; मैं <= 9; मैं ++)
{प्रिंटफ ("% d", [एक]); } - 2-डी सरणी के मामले में, इसे दो छोरों की आवश्यकता होगी और इसी तरह एन-आयामी सरणी को एन छोरों की आवश्यकता होगी।
सरणियों पर किए गए कार्य निम्न हैं:
- व्यूह रचना
- एक सरणी को पार करना
- नए तत्वों का सम्मिलन
- आवश्यक तत्वों का विलोपन।
- किसी तत्व का संशोधन।
- सरणियों का विलय
उदाहरण
निम्नलिखित कार्यक्रम सरणी के पढ़ने और लिखने को दिखाता है।
#include
#include
void main ()
{
int a[10], i;
printf("Enter the array");
for ( i= 0; i <= 9; i++)
{
scanf ( "%d", &a[ i ] ) ;
}
printf( "Enter the array" );
for (i = 0 ; i <= 9 ; i++)
{
printf ( "%d\n", a[ i ] ) ;
}
getch ();
}
लिंक्ड सूची की परिभाषा
लिंक की गई सूची एक दूसरे से जुड़े कुछ डेटा तत्वों की एक विशेष सूची है। इसमें हर तत्व अगले तत्व की ओर इशारा करता है जो तार्किक क्रम का प्रतिनिधित्व करता है। प्रत्येक तत्व को नोड कहा जाता है, जिसमें दो भाग होते हैं।
जानकारी भाग जो जानकारी और पॉइंटर को संग्रहीत करता है जो अगले तत्व को इंगित करता है। जैसा कि आप पते के भंडारण के लिए जानते हैं, हमारे पास सी नामक एक अद्वितीय डेटा संरचनाएं हैं। इसलिए सूची का दूसरा क्षेत्र एक सूचक प्रकार होना चाहिए।
लिंक्ड लिस्ट के प्रकार सिंगली-लिंक्ड लिस्ट, डब्ली लिंक्ड लिस्ट, सर्कुलर लिंक्ड लिस्ट, सर्कुलर डबल लिंक्ड लिस्ट हैं।
लिंक्ड सूची पर किए गए संचालन हैं:
- सृष्टि
- traversing
- निवेशन
- विलोपन
- खोज कर
- कड़ी
- प्रदर्शन
उदाहरण
निम्नलिखित स्निपेट एक लिंक की गई सूची के निर्माण को दिखाता है:
struct node
{
int num;
stuct node *next;
}
start = NULL;
void create()
{
typedef struct node NODE;
NODE *p, *q;
char choice;
first = NULL;
do
{
p = (NODE *) malloc (sizeof (NODE));
printf ("Enter the data item\n");
scanf ("%d", & p -> num);
if (p == NULL)
{
q = start;
while (q -> next ! = NULL)
{ q = q -> next
}
p -> next = q -> next;
q -> = p;
}
else
{
p -> next = start;
start = p;
}
printf ("Do you want to continue (type y or n) ? \n");
scanf ("%c", &choice) ;
}
while ((choice == 'y') || (choice == 'Y'));
}
ऐरे और लिंक्ड सूची के बीच महत्वपूर्ण अंतर
- एक सरणी डेटा संरचना में समान प्रकार के डेटा तत्वों का एक संग्रह होता है, जबकि लिंक की गई सूची को गैर-आदिम डेटा संरचना माना जाता है, जिसमें नोड्स के रूप में ज्ञात अनऑर्डिनेटेड लिंक तत्वों का संग्रह होता है।
- सरणी में तत्व इंडेक्स से संबंधित होते हैं, अर्थात, यदि आप चौथे तत्व में जाना चाहते हैं तो आपको वर्गाकार कोष्ठक के भीतर इसके सूचकांक या स्थान के साथ चर नाम लिखना होगा।
एक लिंक्ड लिस्ट में हालांकि, आपको सिर से शुरू करना होगा और चौथे तत्व तक पहुंचने तक अपना काम करना होगा। - जबकि लिंक की गई लिस्ट में रैखिक समय लगता है, तब एलीमेंट एरे को एक्सेस करना तेज़ है, यह काफी धीमा है।
- सरणियों में सम्मिलन और विलोपन जैसे संचालन बहुत समय का उपभोग करते हैं। दूसरी ओर, लिंक्ड लिस्ट में इन ऑपरेशंस का प्रदर्शन तेज़ है।
- एरे निश्चित आकार के होते हैं। इसके विपरीत, लिंक्ड सूची गतिशील और लचीली हैं और इसके आकार का विस्तार और अनुबंध कर सकती हैं।
- एक सरणी में, मेमोरी को संकलन समय के दौरान सौंपा गया है जबकि लिंक्ड सूची में इसे निष्पादन या रनटाइम के दौरान आवंटित किया गया है।
- तत्वों को सरणियों में लगातार संग्रहीत किया जाता है जबकि इसे लिंक्ड सूचियों में यादृच्छिक रूप से संग्रहीत किया जाता है।
- सरणी में सूचकांक के भीतर वास्तविक डेटा संग्रहीत होने के कारण मेमोरी की आवश्यकता कम है। के रूप में, अतिरिक्त अगले और पिछले संदर्भित तत्वों के भंडारण के कारण लिंक्ड सूचियों में अधिक स्मृति की आवश्यकता है।
- इसके अलावा मेमोरी उपयोग सरणी में अक्षम है। इसके विपरीत, मेमोरी उपयोग सरणी में कुशल है।
निष्कर्ष
सरणी और लिंक की गई सूचियाँ हैं डेटा संरचना के प्रकार उनकी संरचना, पहुंच और हेरफेर के तरीकों, स्मृति की आवश्यकता और उपयोग में भिन्न होते हैं। और इसके कार्यान्वयन पर विशेष लाभ और हानि है। नतीजतन, या तो एक का उपयोग आवश्यकतानुसार किया जा सकता है।