PracticU

רשימה משורשרת - הוספה ומחיקה

בלי כתוביותעם כתוביות
PracticU › קורס C למתקדמים - עבודה מול חומרה Win32 › רשימה משורשרת - הוספה ומחיקה
מילון מושגים:
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
תנאי - ביטוי לוגי בקוד שתוצאתו אמת או שקר, וקובע אילו פקודות יתבצעו בהתאם לערכו.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.

רשימה משורשרת - הוספה ומחיקה
רשימה משורשרת - הוספה ומחיקה ממשיכה את הבניה של הרשימה מההרצאה הקודמת: מוסיפים איבר לסוף, מחפשים צומת, ומוחקים צומת מכל מקום ברשימה.
השלבים העיקריים
1. הוספה לסוף: הפונקציה add last עוברת על הרשימה עד שהצומת שה-next שלו הוא NULL, ומוסיפה אחריו את הצומת החדש. המרצה מזכיר שכאשר הרשימה ריקה צריך לטפל בנפרד, כי root עצמו משתנה.
2. תנאי עצירה: בגרסת הניסיון לא הוגדר תנאי יציאה מתאים, והרשימה נכנסה ללולאה אינסופית. לכן מוסיפים break ברגע שמגיעים לסוף.
3. חיפוש: הפונקציה find מחזירה את הצומת שמכיל ערך נתון, והיא משמשת לבדיקה. המרצה מציין שהוספה ממוינת הייתה מתבצעת לפי הצומת שלפני המיקום הנכון, אבל כשההוספה היא בתחילת הרשימה נדרש מצביע למצביע כדי לעדכן את root. הנושא נשאר להמשך.
4. מחיקה: מוחקים צומת על ידי כיוון הצומת שלפניו אל הצומת שאחריו, ואז שחרור הצומת שנמחק בעזרת delete.
5. שלושה מקרים: מחיקה של הראשון מעדכנת את root. מחיקה של צומת באמצע או בסוף דורשת מעקב אחרי הצומת הקודם. המרצה משתמש במשתנה current שמצביע על הצומת שלפני זה שנמחק.
6. מחיקה בלולאה אחת: בודקים אם הערך של current->next הוא הערך שרוצים למחוק. אם כן, מכוונים את current->next אל הצומת שאחרי הנמחק, ומשחררים את הצומת שנמחק.
7. בדיקה: מוחקים את 9 שנמצא באמצע, את 93 שנמצא בסוף ואת 3 שנמצא בתחילה, ומדפיסים את הרשימה אחרי כל מחיקה.
טעויות נפוצות
- שינוי ערך של next בלי לשמור מצביע לצומת שלפניו יגרום לאובדן חלק מהרשימה.
- הצומת הראשון דורש טיפול נפרד, כי הוא משנה את root.
- בלי תנאי יציאה בלולאה, התוכנית לא תסתיים.
בסיום ההרצאה הסטודנט יודע להוסיף איבר לסוף רשימה, למצוא צומת ולמחוק צומת מכל מקום, כולל מקרי קצה של הראשון והאחרון.

פרקי ההרצאה: רשימה משורשרת - הוספה ומחיקה

  1. 00:00

    המשך הרשימה: add first ו-add last

  2. 01:07

    מעבר לסוף הרשימה או פוינטר לסוף

  3. 01:47

    לולאה למציאת הצומת האחרון

  4. 03:12

    get last ופוינטר current.next

  5. 07:20

    בדיקת add last ושגיאות ביצוע

  6. 09:26

    לולאה אינסופית ותנאי יציאה

  7. 12:04

    add sorted ופונקציית find

  8. 13:02

    find שמחזירה מצביע לצומת

תמלול ההרצאה: רשימה משורשרת - הוספה ומחיקה

הטקסט המלא של הדקות הראשונות בהרצאה «רשימה משורשרת - הוספה ומחיקה» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:46

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

  3. 01:17

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

  4. 01:33

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

  5. 01:53

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

  6. 02:11

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

  7. 02:56

    ואז מה ואז אני יכול להוסיף לדחוף אותו פה בסוף בסוף הרשימה ואני אגיד אז אולי נעשה מפרוקציה get last לא צריך למחזר לא צריך לעשות לא צריך אותה פעם נוספת אז לא צריך אז get last עובר עד הסוף עד שcurrent נקסט שווה לאפס וcurrent נקסט שווה לאפס אז מה היא צריכה לעשות היא צריכה להגיד אוקיי נקסט שווה לנוד החדש אז קורנט נקסט שווה לנוד החדש שווה ל-n אז צריך

  8. 03:36

    את זה להביא לכאן אפילו תו תו חצי מילה ונטר ואת ה-next של ה-node החדש נכוון לאפס והוא נהיה המקוצר הבא וה-next של החדש יהיה מקוצר, ה-next של החדש מקוצר יפה ומה?

  9. 04:10

    current next שווה ל-n וזהו וב-root לא נוגעים אז אם אנחנו כל הזמן כל הזמן נקרא ל-adless מה נקרא אם בפעם הראשונה נקרא ל-adless? בואו נגיד שבפעם הראשונה רות שווה לנעל ואני קורא לעד לה אז אני עובר על הרשימה כאן שווה לרות ורות שווה לנעל אז כאן שווה לנעל ואז נעל נקס אני חוטף את זה. זאת אומרת אסור לקרוא לעד לה בפעם הראשונה במים בכות אני קורא לו

  10. 04:44

    אז אם אני מזהה שאני קורא לו אז אני מתוכו אקרא לעד לה כי עד לה היא בעייתית אז אם אני מזהה שכאן שווה נעל או שרות שווה נעל אני פשוט קורא לעד אי רות שווה ל-num שווה ל-0 אז תקרא לעד תשתנו את i.

  11. 05:19

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

  12. 05:37

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

  13. 06:05

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

  14. 06:53

    ועכשיו בואו נצביע בטריטיז ואני אקבל הפסיק עכשיו בואו נפסיק, ושוב נמצא את הדרך, ובואו נראה מה קורה פה, אז אני קורא ל-add last, או ל-add last, כל מה שאמורה לעשות זה לבדוק ולקרוא ל-add first, ל-add first אנחנו יודעים שהיא עובדת, אז זה לא אמור להיות חידוש, ו-add first אין בעיה, ו-add last בואו נראה

  15. 07:30

    פעם אם היא עושה משהו מועיל לאנושות, אז אם היא ברורת אבל ברורת לא, ואז אנחנו עוברים, ואם קוראים לפני סביבנו עליו בפעם הראשונה הוא לא, הוספנו כרגע שניים.

  16. 07:45

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

  17. 08:04

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

  18. 08:31

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

  19. 08:49

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

  20. 09:18

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

  21. 09:33

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

  22. 10:08

    שאחרי שביטלנו את זה, נעשה break, הכי פשוט, נעשה פה break. אז הנה break, ואני חוזר לכאן, הוא אומר לי that it's not match, נו, אולי בכל זאת, בכל זאת אולי לא.

  23. 10:25

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

  24. 10:41

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

  25. 11:20

    אז ניכנס לשש, טוב זה כבר פשוט, זה כבר ראינו, זה לא חידוש ועד פרס תקצור פורקה, בואו נראה את ההדפסה, שלוש, שש, תשע, שבעי, חמישי, שלוש אז היה לנו תשע, שבעי, חמישי, שלוש ועצרנו את שש ושלוש אז שלוש, שש, שלוש, שש, בואו ניקח את זה איתנו שיהיה לנו את זה

  26. 11:46

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

  27. 12:17

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

  28. 12:38

    וואה למה? בגלל השורש הרות לא נוכל להצביע נצטרך להחזיר מצביע למצביע ותמיד להחזיר מצביע למצביע זה יהיה כיף.

  29. 12:50

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

  30. 13:37

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

  31. 14:15

    מה נעשה אם דלתא שווה ל-i? זה מצא לו את הנורד הנכון, אז נחזיר, נחזיר את הנורד הנכון. מי הנורד הנכון? נחזיר, את קאנט. קאנט הוא הנורד הנכון, כי הדאטה שלו הוא הנכון, אז זה קוראים לזה פיינד.

  32. 14:30

    אוקיי, פיינד חביבה, בואו נעשה את זה בפיינד, ופיינד, נתון הרווח חובד, אה יפה, פיינד 93, ובואו נחזיר לנו נורד

לקורס המלא: קורס C למתקדמים אונליין

ההרצאה הקודמת: רשימה משורשרת - הוספה והדפסה

הרצאות קשורות מקורסים אחרים

  • הוספה ומחיקה של קבצים ב-GitHub
  • פקדי רשימה - List
  • יצירת טבלת רשימה ב-SQL
  • הצגת רשימה - React List

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס תכנות מתקדם - #Advanced .NET C