ഫ്രണ്ട്എൻഡ് ലീനിയർ ഡാറ്റാ സ്ട്രക്ചറുകൾ
ലീനിയർ ഡാറ്റാ സ്ട്രക്ചറുകൾ എലമെന്റുകളെ ഒരു ക്രമത്തിൽ ക്രമീകരിക്കുന്നു. ഓരോ എലമെന്റിനും ഒരു മുൻഗാമിയും (predecessor) ഒരു പിൻഗാമിയും (successor) ഉണ്ടായിരിക്കും.
Arrays
JavaScript-ലെ പ്രധാനപ്പെട്ട ടൂളാണ് അറേകൾ (Arrays). ഇവ കണ്ടിഗ്വസ് മെമ്മറി (contiguous memory) ഉപയോഗിക്കുന്നു. ഇത് ഇൻഡക്സ് ഉപയോഗിച്ച് ഏത് എലമെന്റും ഉടനടി ആക്സസ് ചെയ്യാൻ നിങ്ങളെ സഹായിക്കുന്നു.
push: അറ്റത്ത് ഒരു എലമെന്റ് ചേർക്കുന്നു.unshift: തുടക്കത്തിൽ ഒരു എലമെന്റ് ചേർക്കുന്നു. മറ്റ് എല്ലാ എലമെന്റുകളും ഒരു സ്ഥാനം വലത്തേക്ക് മാറേണ്ടി വരുന്നതിനാൽ ഇത് സാവധാനത്തിലാണ് പ്രവർത്തിക്കുന്നത്.splice: ഏത് സ്ഥാനത്തും എലമെന്റുകൾ ചേർക്കാനോ നീക്കം ചെയ്യാനോ സഹായിക്കുന്നു. ഈ രീതി ഒറിജിനൽ അറേയിൽ മാറ്റം വരുത്തുന്നു. ഇതൊരു പ്യുവർ ഫംഗ്ഷൻ (pure function) അല്ല.
Note: ഒരു അറേ വളരെ വലുതാകുമ്പോൾ, JavaScript കൂടുതൽ വലിയൊരു മെമ്മറി ബ്ലോക്ക് അനുവദിക്കുകയും എല്ലാം അതിലേക്ക് കോപ്പി ചെയ്യുകയും വേണം. ഇത് പെർഫോമൻസിനെ ബാധിക്കും.
Stacks
ഒരു സ്റ്റാക്ക് LIFO നിയമം പിന്തുടരുന്നു: Last In, First Out. അടുക്കിവെച്ചിരിക്കുന്ന പ്ലേറ്റുകളുടെ ഒരു സ്റ്റാക്ക് സങ്കൽപ്പിക്കുക. നിങ്ങൾക്ക് മുകളിൽ നിന്ന് മാത്രമേ എലമെന്റുകൾ ചേർക്കാനോ നീക്കം ചെയ്യാനോ കഴിയൂ.
push: മുകളിൽ ചേർക്കുന്നു.pop: മുകളിൽ നിന്ന് നീക്കം ചെയ്യുന്നു.peek: എലമെന്റ് നീക്കം ചെയ്യാതെ തന്നെ മുകളിലുള്ള എലമെന്റ് പരിശോധിക്കുന്നു.
Queues
ഒരു ക്യൂ FIFO നിയമം പിന്തുടരുന്നു: First In, First Out. ഒരു കടയിലെ ക്യൂ സങ്കൽപ്പിക്കുക.
push: പിന്നിൽ ചേർക്കുന്നു.shift: മുൻപിൽ നിന്ന് നീക്കം ചെയ്യുന്നു.
Warning: വലിയ ഡാറ്റാസെറ്റുകളിൽ അarray-യിൽ shift ഉപയോഗിക്കുന്നത് സാവധാനമാണ്. വിടവ് നികത്തുന്നതിനായി ഓരോ എലമെന്റും ഇടത്തേക്ക് മാറേണ്ടതുണ്ട്. വലിയ അളവിലുള്ള ഡാറ്റയ്ക്ക് പകരം ഒരു ലിങ്ക്ഡ് ലിസ്റ്റ് (linked list) ഉപയോഗിക്കുക.
Linked Lists
ഒരു ലിങ്ക്ഡ് ലിസ്റ്റ് നോഡുകൾ (nodes) കൊണ്ട് നിർമ്മിതമാണ്. ഓരോ നോഡിലും ഡാറ്റയും അടുത്ത നോഡിലേക്കുള്ള ഒരു പോയിന്ററും (pointer) ഉണ്ടായിരിക്കും.
- Advantages: സ്ഥാനം കണ്ടെത്തിക്കഴിഞ്ഞാൽ നോഡുകൾ ചേർക്കുന്നതോ നീക്കം ചെയ്യുന്നതോ വേഗത്തിലായിരിക്കും. നിങ്ങൾ പോയിന്ററുകൾ മാത്രം മാറ്റിയാൽ മതിയാകും.
- Disadvantages: നിങ്ങൾക്ക് നേരിട്ട് ഒരു ഇൻഡക്സിലേക്ക് ചാടാൻ കഴിയില്ല. ഹെഡിൽ (head) നിന്ന് തുടങ്ങി ഓരോ പോയിന്ററിലൂടെയും ഓരോന്നായി മുന്നോട്ട് പോകണം. ഇത് സാവധാനമാണ്.
Comparison Summary:
- Arrays: ഇടയ്ക്കിടെ വായിക്കുന്നതിനും ചെറിയ ഡാറ്റയ്ക്കും ഏറ്റവും അനുയോജ്യം. Access O(1) ആണ്.
- Linked Lists: ഇടയ്ക്കിടെ എഴുതുന്നതിനും വലിയ ഡാറ്റയ്ക്കും ഏറ്റവും അനുയോജ്യം. നോഡ് കയ്യിലുണ്ടെങ്കിൽ insertion O(1) ആണ്.
Pro Tips for JavaScript:
- ഒരു അറേയിൽ വ്യത്യസ്ത ഡാറ്റാ ടൈപ്പുകൾ കലർത്തരുത്. ടൈപ്പുകൾ ഒരേപോലെ നിലനിർത്തുന്നത് എൻജിന് കണ്ടിഗ്വസ് മെമ്മറി ഉപയോഗിക്കാൻ സഹായിക്കും.
- നമ്പറുകൾ സോർട്ട് ചെയ്യുമ്പോൾ എപ്പോഴും ഒരു കമ്പാരേറ്റർ ഫംഗ്ഷൻ (comparator function) ഉപയോഗിക്കുക.
[10, 2].sort()എന്നത്[10, 2]എന്ന് നൽകുന്നു, കാരണം അത് സ്ട്രിംഗുകളായിട്ടാണ് സോർട്ട് ചെയ്യുന്നത്. - മിക്ക നേറ്റീവ് അറേ മെത്തേഡുകളും (native array methods) ഒറിജിനൽ അറേയിൽ മാറ്റം വരുത്തുന്നു എന്നത് ഓർക്കുക.