ההבדל בין מערכים ורשימות מקושרות
מערכים לעומת רשימות מקושרות
מערכים הם מבנה הנתונים הנפוץ ביותר לאחסון אוסף של אלמנטים. רוב שפות התכנות מספקות שיטות להכרזה קלה על מערכים ואלמנטים גישה במערכים. רשימה מקושרת, רשימה מדויקת יותר באופן מדויק יותר, היא גם מבנה נתונים שניתן להשתמש בהם כדי לאחסן אוסף של אלמנטים. זה מורכב רצף של צמתים כל צומת יש התייחסות הצומת הבא ברצף.
מוצג בתרשים 1, הוא פיסת קוד המשמש בדרך כלל להכריז ולהקצות ערכים למערך. איור 2 מתאר כיצד ייראה מערך בזיכרון.
מעל לקוד מגדיר מערך שיכול לאחסן 5 מספרים שלמים והם נגישים באמצעות מדדים 0 עד 4. מאפיין חשוב אחד של מערך הוא שכל המערך מוקצה כגוש בודד של זיכרון וכל אלמנט מקבל מרחב משלה מַעֲרָך. לאחר הגדרת מערך, גודלו קבוע. אז אם אתה לא בטוח לגבי גודל המערך בזמן קומפיל, היית צריך להגדיר מערך מספיק גדול כדי להיות בצד הבטוח. אבל, רוב הזמן אנחנו הולכים להשתמש פחות מספר אלמנטים מאשר יש לנו שהוקצו. אז כמות ניכרת של זיכרון מבוזבז למעשה. מצד שני, אם "מערך מספיק גדול" הוא לא מספיק גדול מספיק, התוכנית היתה לקרוס.
רשימה מקושרת מקצה זיכרון לאלמנטים שלה בנפרד בגוש הזיכרון שלה, והמבנה הכללי מתקבל על ידי קישור אלמנטים אלה כקישורים בשרשרת. לכל רכיב ברשימה מקושרת יש שני שדות כפי שמוצג באיור 3. שדה הנתונים מכיל את הנתונים המאוחסנים בפועל, והשדה הבא מכיל את הפניה אל הרכיב הבא בשרשרת. האלמנט הראשון של הרשימה המקושרת מאוחסן כראש הרשימה המקושרת.
נתונים | הבא |
איור 3: אלמנט של רשימה מקושרת
איור 4 מציג רשימה מקושרת עם שלושה אלמנטים. כל רכיב מאחסן את הנתונים שלו ואת כל האלמנטים, למעט החנות האחרת, התייחסות למאפיין הבא. אלמנט אחרון מחזיקה ערך ריק בשדה הבא שלה. ניתן לגשת אלמנט כלשהו ברשימה על ידי לחיצה על הראש ועקוב אחר המצביע הבא, עד שתעמוד במרכיב הרצוי.
למרות מערכים ורשימות מקושרים דומים במובן ששניהם משמשים לאחסון אוסף של אלמנטים, הם נוצרים הבדלים עקב אסטרטגיות הם משתמשים כדי להקצות זיכרון אלמנטים שלה. מערכים להקצות זיכרון לכל האלמנטים שלה כמו בלוק אחד ואת גודל המערך צריך להיקבע בזמן ריצה. זה יגרום מערכים לא יעיל במצבים שבהם אתה לא יודע את הגודל של המערך בזמן קומפיל. מאחר שרשימה מקושרת מקצה זיכרון לאלמנטים שלה בנפרד, זה יהיה יעיל בהרבה במצבים שבהם אתה לא יודע את גודל הרשימה בזמן קומפילציה.ההכרזה וגישה אלמנטים ברשימה מקושרת לא תהיה ישר קדימה לעומת איך לגשת ישירות אלמנטים במערך באמצעות המדדים שלה.