ساختارهای داده خطی در فرانتاند
ساختارهای داده خطی، عناصر را در یک توالی قرار میدهند. هر عنصر دارای یک عنصر قبل و یک عنصر بعد است.
آرایهها (Arrays)
آرایهها ابزار اصلی در JavaScript هستند. آنها از حافظه پیوسته (contiguous memory) استفاده میکنند. این ویژگی به شما اجازه میدهد تا با استفاده از ایندکس، بلافاصله به هر عنصری دسترسی داشته باشید.
push: یک عنصر به انتهای آرایه اضافه میکند.unshift: یک عنصر به ابتدای آرایه اضافه میکند. این عملیات کند است زیرا تمام عناصر دیگر باید یک موقعیت به سمت راست حرکت کنند.splice: عناصر را در هر موقعیتی اضافه یا حذف میکند. این متد آرایه اصلی را تغییر میدهد و یک تابع خالص (pure function) نیست.
نکته: وقتی یک آرایه بیش از حد بزرگ میشود، JavaScript باید بلوک حافظه بزرگتری اختصاص دهد و همه چیز را به آنجا کپی کند. این کار باعث کاهش عملکرد (performance) میشود.
پشتهها (Stacks)
یک پشته از قانون LIFO پیروی میکند: آخرین ورودی، اولین خروجی (Last In, First Out). یک دسته بشقاب را تصور کنید؛ شما فقط از بالا چیزی اضافه یا حذف میکنید.
push: اضافه کردن به بالا.pop: حذف کردن از بالا.peek: مشاهده عنصر بالایی بدون حذف آن.
صفها (Queues)
یک صف از قانون FIFO پیروی میکند: اولین ورودی، اولین خروجی (First In, First Out). یک صف در فروشگاه را تصور کنید.
push: اضافه کردن به انتها.shift: حذف کردن از ابتدا.
هشدار: استفاده از shift روی یک آرایه برای مجموعهدادههای بزرگ کند است. هر عنصر باید برای پر کردن جای خالی به سمت چپ حرکت کند. برای دادههای با حجم بالا، به جای آن از لیست پیوندی (linked list) استفاده کنید.
لیستهای پیوندی (Linked Lists)
یک لیست پیوندی از گرهها (nodes) تشکیل شده است. هر گره شامل داده و یک اشارهگر (pointer) به گره بعدی است.
- مزایا: پس از پیدا کردن محل مورد نظر، اضافه یا حذف کردن گرهها سریع است؛ زیرا شما فقط اشارهگرها را تغییر میدهید.
- معایب: نمیتوانید مستقیماً به یک ایندکس بپرید. باید از سر لیست (head) شروع کنید و اشارهگرها را یکییکی دنبال کنید. این کار کند است.
خلاصه مقایسه:
- آرایهها: بهترین گزینه برای خواندنهای مکرر و دادههای کوچک. دسترسی با پیچیدگی
O(1)انجام میشود. - لیستهای پیوندی: بهترین گزینه برای نوشتنهای مکرر و دادههای بزرگ. اگر گره را داشته باشید، درج (insertion) با پیچیدگی
O(1)انجام میشود.
نکات حرفهای برای JavaScript:
- انواع دادهها را در یک آرایه با هم ترکیب نکنید. یکسان نگه داشتن انواع دادهها به موتور (engine) کمک میکند تا از حافظه پیوسته استفاده کند.
- هنگام مرتبسازی اعداد، همیشه از یک تابع مقایسهگر (comparator function) استفاده کنید. خروجی
[10, 2].sort()برابر با[10, 2]خواهد بود، زیرا اعداد را به صورت رشته (string) مرتب میکند. - به یاد داشته باشید که اکثر متدهای اصلی آرایه، آرایه اصلی را تغییر میدهند (mutate).