𝗙𝗿𝗼𝗻𝘁𝗲𝗻𝗱 𝗟𝗶𝗻𝗲𝗮𝗿 𝗗𝗮𝘁𝗮 𝗦𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲𝘀
لینیئر ڈیٹا اسٹرکچرز عناصر کو ایک ترتیب میں ترتیب دیتے ہیں۔ ہر عنصر کا ایک سابقہ (predecessor) اور ایک بعد والا (successor) عنصر ہوتا ہے۔
Arrays
Arrays جاوا اسکرپٹ میں بنیادی ٹول ہیں۔ یہ متصل میموری (contiguous memory) استعمال کرتے ہیں۔ اس سے آپ کسی بھی عنصر تک اس کے انڈیکس کے ذریعے فوری طور پر رسائی حاصل کر سکتے ہیں۔
- push: آخر میں ایک عنصر شامل کرتا ہے۔
- unshift: شروع میں ایک عنصر شامل کرتا ہے۔ یہ عمل سست ہے کیونکہ باقی تمام عناصر کو ایک مقام دائیں طرف منتقل ہونا پڑتا ہے۔
- splice: کسی بھی مقام پر عناصر شامل کرتا ہے یا ہٹاتا ہے۔ یہ طریقہ اصل ایرے کو تبدیل کر دیتا ہے۔ یہ ایک pure function نہیں ہے۔
نوٹ: جب ایک ایرے بہت بڑا ہو جاتا ہے، تو جاوا اسکرپٹ کو میموری کا ایک بڑا بلاک مختص کرنا پڑتا ہے اور سب کچھ وہاں کاپی کرنا پڑتا ہے۔ اس سے کارکردگی (performance) متاثر ہوتی ہے۔
Stacks
ایک Stack LIFO اصول پر عمل کرتا ہے: Last In, First Out۔ پلیٹوں کے ڈھیر کے بارے میں سوچیں۔ آپ صرف اوپر سے کچھ شامل کرتے ہیں یا ہٹاتے ہیں۔
- push: اوپر شامل کریں۔
- pop: اوپر سے ہٹائیں۔
- peek: اوپر والے عنصر کو ہٹائے بغیر اسے دیکھیں۔
Queues
ایک Queue FIFO اصول پر عمل کرتا ہے: First In, First Out۔ کسی دکان پر لگی لائن کے بارے میں سوچیں۔
- push: پیچھے شامل کریں۔
- shift: شروع سے ہٹائیں۔
وارننگ: بڑے ڈیٹا سیٹس کے لیے ایرے پر shift کا استعمال کرنا سست ہے۔ خالی جگہ کو بھرنے کے لیے ہر عنصر کو بائیں طرف منتقل ہونا پڑتا ہے۔ زیادہ ڈیٹا کے لیے، اس کے بجائے ایک linked list استعمال کریں۔
Linked Lists
ایک linked list نوڈز (nodes) پر مشتمل ہوتی ہے۔ ہر نوڈ میں ڈیٹا اور اگلے نوڈ کا پوینٹر (pointer) ہوتا ہے۔
- فوائد: ایک بار جگہ مل جانے کے بعد نوڈز کو شامل کرنا یا ہٹانا تیز ہوتا ہے۔ آپ کو صرف پوینٹرز تبدیل کرنے پڑتے ہیں۔
- نقصانات: آپ کسی انڈیکس پر براہ راست نہیں پہنچ سکتے۔ آپ کو 'head' سے شروع کرنا ہوگا اور ایک ایک کر کے پوینٹرز کا پیچھا کرنا ہوگا۔ یہ عمل سست ہے۔
موازنہ کا خلاصہ:
- Arrays: بار بار پڑھنے (reads) اور چھوٹے ڈیٹا کے لیے بہترین ہیں۔ رسائی O(1) ہے۔
- Linked Lists: بار بار لکھنے (writes) اور بڑے ڈیٹا کے لیے بہترین ہیں۔ اگر آپ کے پاس نوڈ موجود ہو تو انسرشن (insertion) O(1) ہے۔
جاوا اسکرپٹ کے لیے پرو ٹپس:
- ایک ایرے میں مختلف ڈیٹا ٹائپس کو مکس نہ کریں۔ ٹائپس کو یکساں رکھنے سے انجن کو متصل میموری استعمال کرنے میں مدد ملتی ہے۔
- نمبرز کو ترتیب (sort) دیتے وقت ہمیشہ ایک comparator function استعمال کریں۔
[10, 2].sort()کا نتیجہ[10, 2]نکلتا ہے کیونکہ یہ اسٹرنگز کے طور پر ترتیب دیتا ہے۔ - یاد رکھیں کہ زیادہ تر نیٹیو ایرے میتھڈز اصل ایرے کو تبدیل (mutate) کر دیتے ہیں۔