מבני נתונים ליניאריים ב-Frontend
מבני נתונים ליניאריים מסדרים אלמנטים ברצף. לכל אלמנט יש קודם אחד וממשי אחד.
Arrays מערכים הם הכלי העיקרי ב-JavaScript. הם משתמשים בזיכרון רציף (contiguous memory). זה מאפשר לך לגשת לכל אלמנט באמצעות האינדקס שלו באופן מיידי.
push: מוסיף אלמנט לסוף.unshift: מוסיף אלמנט להתחלה. פעולה זו איטית מכיוון שכל שאר האלמנטים חייבים לזוז מיקום אחד ימינה.splice: מוסיף או מסיר אלמנטים בכל מיקום. מתודה זו משנה את המערך המקורי. היא אינה פונקציה טהורה (pure function).
הערה: כאשר מערך גדל מדי, JavaScript חייבת להקצות בלוק זיכרון גדול יותר ולהעתיק אליו הכל. זה גובה מחיר בביצועים.
Stacks מחסנית (Stack) פועלת לפי כלל ה-LIFO: Last In, First Out (האחרון שנכנס הוא הראשון שיוצא). חשבו על ערימה של צלחות. אתם מוסיפים או מסירים רק מהחלק העליון.
push: הוספה לחלק העליון.pop: הסרה מהחלק העליון.peek: צפייה באלמנט העליון מבלי להסיר אותו.
Queues תור (Queue) פועל לפי כלל ה-FIFO: First In, First Out (הראשון שנכנס הוא הראשון שיוצא). חשבו על תור בחנות.
push: הוספה לסוף.shift: הסרה מההתחלה.
אזהרה: שימוש ב-shift על מערך הוא איטי עבור מערכי נתונים גדולים. כל אלמנט חייב לזוז שמאלה כדי למלא את הרווח. עבור נתונים בנפח גבוה, השתמשו ברשימה מקושרת (linked list) במקום זאת.
Linked Lists רשימה מקושרת מורכבת מצמתים (nodes). כל צומת מחזיק נתונים ומצביע (pointer) לצומת הבא.
- יתרונות: הוספה או הסרה של צמתים היא מהירה ברגע שמוצאים את המיקום. משנים רק את המצביעים.
- חסרונות: לא ניתן לקפוץ לאינדקס מסוים. חייבים להתחיל מהראש (head) ולעקוב אחרי המצביעים אחד אחד. זה איטי.
סיכום השוואתי:
- Arrays: הטובים ביותר לקריאות תכופות ולנתונים קטנים. הגישה היא O(1).
- Linked Lists: הטובות ביותר לכתיבות תכופות ולנתונים גדולים. ההכנסה היא O(1) אם יש לכם את הצומת.
טיפים מקצועיים ל-JavaScript:
- אל תערבבו סוגי נתונים בתוך מערך. שמירה על סוגים אחידים עוזרת למנוע (engine) להשתמש בזיכרון רציף.
- תמיד השתמשו בפונקציית השוואה (comparator function) בעת מיון מספרים.
[10, 2].sort()יחזיר[10, 2]מכיוון שהוא ממיין כמחרוזות. - זכרו שרוב מתודות המערך המובנות משנות (mutate) את המערך המקורי.