Smart-World Surf
🔬 הרחבה — צלילה לעומק

רשימה מקושרת (Linked List)

בהאוניברסיטה הפתוחה · Israel
🧭 המושג הזה בכל הקורסים →

שדרגו את הדף עם קובץ

גררו מבחן, סיכום או צילום של מחברת — אני אקרא, אוודא שזה רלוונטי, ואחדד את התוכן (מושגים, סיכויי מבחן, מומחיות).

אם לא סימנתם — הקובץ נקרא לחילוץ עובדות בלבד ואז נמחק מהמערכת (זכויות יוצרים). העובדות שנלמדו נשארות ומשפרות את הקורס.

רשימה מקושרת (Linked List): צלילה עמוקה לקורס 20465

בקורס "מעבדה בתכנות מערכות" (20465) באוניברסיטה הפתוחה, רשימות מקושרות הן קונספט ליבה שמופיע באופן תדיר במבחנים, לרוב בשאלות כמו "question1" ו-"question3". סגנון הבחינה נוטה להתמקד ביישום מעשי של רשימות מקושרות בשפת C/C++, תוך דגש על הבנה עמוקה של ניהול זיכרון (הקצאה ושחרור), טיפול נכון במצביעים (כולל מצביעים למצביעים), ומקרי קצה (רשימה ריקה, צומת יחיד). המבחנים בוחנים לא רק את היכולת לכתוב קוד פונקציונלי, אלא גם את היכולת לזהות ולתקן שגיאות נפוצות כמו דליפות זיכרון או גישה למצביעי NULL. הבקיאות במימוש פעולות בסיסיות ומורכבות כאחד היא קריטית להצלחה.

מהי רשימה מקושרת?

רשימה מקושרת היא מבנה נתונים ליניארי ודינמי, המורכב מסדרה של אלמנטים הנקראים צמתים. בניגוד למערך, שבו האלמנטים מאוחסנים בזיכרון באופן רציף, צמתים ברשימה מקושרת יכולים להיות מפוזרים בזיכרון, והקשר ביניהם נוצר באמצעות מצביעים.

צומת (Node): היחידה הבסיסית של רשימה מקושרת. כל צומת מכיל שני חלקים עיקריים: נתונים (data) ומצביע (pointer) לצומת הבא ברשימה.
מצביע (Pointer): משתנה המכיל כתובת זיכרון של משתנה אחר. ברשימה מקושרת, המצביעים מקשרים בין הצמתים השונים.
ראש הרשימה (Head): מצביע מיוחד המצביע לצומת הראשון ברשימה. אם הרשימה ריקה, ראש הרשימה מצביע ל-NULL.

למה רשימה מקושרת חשובה?

  • גמישות בגודל: בניגוד למערכים סטטיים, רשימה מקושרת יכולה לגדול או לקטון באופן דינמי בזמן ריצה, ללא צורך בהקצאה מחדש של בלוק זיכרון גדול.
  • הוספה ומחיקה יעילות: הוספה או מחיקה של צמתים באמצע הרשימה דורשת שינוי של מספר קטן של מצביעים בלבד (מורכבות זמן O(1) אם מיקום הצומת הקודם ידוע, או O(n) אם יש לחפש אותו), בניגוד למערך שבו יש להזיז את כל האלמנטים הבאים.
  • שימוש יעיל בזיכרון: הזיכרון מוקצה רק לצמתים הקיימים בפועל, ללא בזבוז של מקום עבור קיבולת שאינה בשימוש.

סוגי רשימות מקושרות נפוצים

רשימה מקושרת חד-כיוונית (Singly Linked List)

כל צומת מכיל מצביע אחד בלבד לצומת הבא. מעבר אפשרי רק קדימה. הצומת האחרון מצביע ל-NULL.

רשימה מקושרת דו-כיוונית (Doubly Linked List)

כל צומת מכיל שני מצביעים: אחד לצומת הבא (next) ואחד לצומת הקודם (prev). מאפשר מעבר קדימה ואחורה. דורש יותר זיכרון לכל צומת.

רשימה מקושרת מעגלית (Circular Linked List)

הצומת האחרון ברשימה מצביע בחזרה לראש הרשימה (או לצומת אחר ברשימה), במקום ל-NULL. יכולה להיות חד-כיוונית או דו-כיוונית.

פעולות בסיסיות

  • הוספה (Insertion): הוספת צומת חדש לתחילת, אמצע או סוף הרשימה.
  • מחיקה (Deletion): הסרת צומת מהרשימה ושחרור זיכרונו.
  • חיפוש (Search): מציאת צומת המכיל ערך מסוים.
  • מעבר (Traversal): ביקור בכל צומת ברשימה, בדרך כלל מהראש ועד הסוף.
ניהול זיכרון ומצביעים: זהו לב העניין בקורס 20465. כל פעולת הוספה חייבת לכלול הקצאת זיכרון באמצעות malloc (או calloc), וכל פעולת מחיקה חייבת לכלול שחרור זיכרון באמצעות free. אי ביצוע free מוביל לדליפות זיכרון (Memory Leaks). בנוסף, יש לטפל בזהירות רבה במצביעים, במיוחד מצביעי NULL, כדי למנוע שגיאות גישה לזיכרון (Segmentation Fault).

מורכבות זמן (Time Complexity)

  • הוספה/מחיקה בתחילת הרשימה: O(1) - קבועה.
  • הוספה/מחיקה בסוף הרשימה: O(n) ברשימה חד-כיוונית (דורש מעבר על כל הרשימה), או O(1) אם יש מצביע לזנב הרשימה.
  • הוספה/מחיקה באמצע הרשימה: O(n) (דורש חיפוש), או O(1) אם מיקום הצומת הקודם ידוע.
  • חיפוש צומת: O(n) - ליניארית.
  • גישה לאיבר לפי אינדקס: O(n) - ליניארית (בניגוד למערך שהוא O(1)).

🔗 מושגים קשורים

מושגים נוספים מאותו קורס

מצביע (Pointer) הקצאה דינמית (Dynamic Allocation) מבנה (Struct) איחוד (Union) קובץ Makefile קומפילציה (Compilation) קדם-מעבד (Preprocessor) מאקרו (Macro) טווח הכרה (Scope) אורך חיים (Lifetime) מערך (Array) מחרוזת (String) קלט/פלט (I/O) שגיאת פילוח (Segmentation Fault) רקורסיה (Recursion) טיפוס נתונים (Data Type) הפניה (Dereferencing) קובץ כותרת (Header File) סיבוכיות זמן (Time Complexity) סיבוכיות מקום (Space Complexity) typedef שדות סיביות (Bit Fields) פונקציית קריאה חוזרת (Callback Function) קובץ אובייקט (Object File)

📝 מבחנים מהקורס

האוניברסיטה הפתוחה · תרגלו מול המבחנים האמיתיים