𝗙𝗿𝗼𝗻𝘁𝗲𝗻𝗱 𝗟𝗶𝗻𝗲𝗮𝗿 𝗗𝗮𝘁𝗮 𝗦𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲𝘀
लीनियर डेटा स्ट्रक्चर्स (Linear data structures) तत्वों को एक क्रम में व्यवस्थित करते हैं। प्रत्येक तत्व का एक पूर्ववर्ती (predecessor) और एक अनुवर्ती (successor) होता है।
Arrays Arrays JavaScript में मुख्य टूल हैं। वे contiguous memory का उपयोग करते हैं। इससे आप किसी भी तत्व को उसके index द्वारा तुरंत एक्सेस कर सकते हैं।
- push: अंत में एक तत्व जोड़ता है।
- unshift: शुरुआत में एक तत्व जोड़ता है। यह धीमा है क्योंकि अन्य सभी तत्वों को एक स्थान दाईं ओर खिसकना पड़ता है।
- splice: किसी भी स्थान पर तत्वों को जोड़ता या हटाता है। यह मेथड मूल array को बदल देता है। यह एक pure function नहीं है।
Note: जब एक array बहुत बड़ा हो जाता है, तो JavaScript को एक बड़ा मेमोरी ब्लॉक आवंटित करना पड़ता है और सब कुछ वहां कॉपी करना पड़ता है। इससे परफॉरमेंस (performance) पर असर पड़ता है।
Stacks एक stack LIFO नियम का पालन करता है: Last In, First Out (जो अंत में आया, वह सबसे पहले बाहर जाएगा)। प्लेटों के ढेर के बारे में सोचें। आप केवल ऊपर से ही कुछ जोड़ते या हटाते हैं।
- push: ऊपर जोड़ें।
- pop: ऊपर से हटाएं।
- peek: तत्व को हटाए बिना उसके ऊपर वाले तत्व को देखें।
Queues एक queue FIFO नियम का पालन करता है: First In, First Out (जो पहले आया, वह सबसे पहले बाहर जाएगा)। किसी स्टोर की लाइन के बारे में सोचें।
- push: पीछे जोड़ें।
- shift: सामने से हटाएं।
Warning: बड़े डेटासेट के लिए array पर shift का उपयोग करना धीमा होता है। खाली जगह भरने के लिए प्रत्येक तत्व को बाईं ओर खिसकना पड़ता है। भारी मात्रा में डेटा के लिए, इसके बजाय linked list का उपयोग करें।
Linked Lists एक linked list nodes से मिलकर बनी होती है। प्रत्येक node में डेटा और अगले node का एक pointer होता है।
- Advantages: एक बार सही स्थान मिल जाने के बाद nodes को जोड़ना या हटाना तेज़ होता है। आपको केवल pointers बदलने होते हैं।
- Disadvantages: आप किसी index पर सीधे नहीं कूद सकते। आपको head से शुरुआत करनी होगी और एक-एक करके pointers का पालन करना होगा। यह धीमा है।
Comparison Summary:
- Arrays: बार-बार पढ़ने (reads) और छोटे डेटा के लिए सबसे अच्छे हैं। Access O(1) है।
- Linked Lists: बार-बार लिखने (writes) और बड़े डेटा के लिए सबसे अच्छे हैं। यदि आपके पास node है, तो insertion O(1) है।
Pro Tips for JavaScript:
- Array में अलग-अलग data types को न मिलाएं। प्रकारों (types) को एक समान रखने से इंजन को contiguous memory का उपयोग करने में मदद मिलती है।
- नंबरों को सॉर्ट करते समय हमेशा एक comparator function का उपयोग करें।
[10, 2].sort()का परिणाम[10, 2]आता है क्योंकि यह strings के रूप में सॉर्ट करता है। - याद रखें कि अधिकांश native array methods मूल array को mutate (बदल) देते हैं।