ABA


"רשימות מקושרות (מבקש חומר בנושא \ מדריכים)"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #11254 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 11254
aCoZz 
חבר מתאריך 19.7.06
17692 הודעות
   23:13   26.03.13   
אל הפורום  
  רשימות מקושרות (מבקש חומר בנושא \ מדריכים)  
 
   אני לומד מדעי המחשב ואין שום רקע בתכנות
אבל עד עכשיו הצלחתי להסתדר עם כול מה שלימדו
עכשיו בסמסטר החדש התחלתי קורס "מבני נתונים"
ואני פשוט יושב על זה כבר כמה ימים ברצף ומחכה שהאסימון יפול אבל זה לא קורה
זה גורם ממש לתסכול ועצבים...
אשמח לאיזה מדריך... חומר בנושא או טיפ ממישהו שמכיר את זה
בקיצור כל דבר יעזור תודה !


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  מה בעצם אתה רוצה להבין? CaTz 26.03.13 23:18 1
     תודה aCoZz  26.03.13 23:27 3
         מה הבעיה לגשת לאיבר באמצע? VeNom  27.03.13 00:19 4
             כן אבל יש שם בעיה aCoZz  27.03.13 07:43 5
                 אוקי שרשמתי את ההודע עלה לי רעיון, מישהו יכול לאשר שזה יעבוד : aCoZz  27.03.13 07:51 6
                     אוקיי, זה ב-C CaTz 27.03.13 09:30 7
                 אממ זה לא מסובך.. VeNom  27.03.13 21:21 9
  שחכתי לציין את הדבר הכי חשוב המימוש הוא ב C aCoZz  26.03.13 23:27 2
  זה מה שיצאה... יש טיפים לשיפור ? aCoZz  27.03.13 16:25 8

       
CaTz
חבר מתאריך 2.10.04
14537 הודעות
   23:18   26.03.13   
אל הפורום  
  1. מה בעצם אתה רוצה להבין?  
בתגובה להודעה מספר 0
 
   מה זה רשימה מקושרת?

ישנם שני מימושים, עם מעטפת או בלי מעטפת.
אני מניח שאתה עובד עם שפה שתומכת ב-OOP.

אז כל שרשרת ברשימה, זה אובייקט שמכיל את המידע שהוא מחזיק+ מצביע לחוליה הבאה ברשימה.
כשאתה רוצה לחפש ברשימה, אתה צריך לקבל רק את המצביע לחוליה הראשונה, ובעזרת המצביע ל-NEXT שיש בכל חוליה אתה יכול בעצם לעבור על כל אברי הרשימה.

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

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


מקווה שהביא לך קצת כיוון :]


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
aCoZz 
חבר מתאריך 19.7.06
17692 הודעות
   23:27   26.03.13   
אל הפורום  
  3. תודה  
בתגובה להודעה מספר 1
 
   אבל לא בדיוק הבנתי מה שרשמת כול מה שאני יודע זה C בנתיים
וכן זה ברור אני מבין מה רשימה מקושרת עושה יש סטראק שהוא מצביע לעוד סטרק וככה נוצרת רשימה
יש את איבר המפתח שזה הראש.. רעיונית הכול מובן
וגם פעולות בסיסיות גם מובנות לי והצלחתי לממש אותן פעולות כמו הכנסת איבר לראש הרשימה ומחיקית איבר
הבעיה מתחילה שאני צריך לגשת לאיבר באמצע הרשימה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   00:19   27.03.13   
אל הפורום  
  4. מה הבעיה לגשת לאיבר באמצע?  
בתגובה להודעה מספר 3
 
   תחשוב שזה סוג של רכבת עם כמה קרונות..אם הצלחת להוסיף קרון ולהוריד קרון(מחיקה) מה הבעיה לגשת לקרון מספר 3? או לקרון שמכיל 100 אנשים?

רוב הפעולות שתעשה על רשימת מקושרת(חד כיוונית) הם:
1. כל עוד לא הגעתי לסוף(סוף רשימה הוא פוינטר NULL).
2. בדוק תנאי מסויים(האם הגעתי לקרון 3 או האם זה הקרון שמכיל 100 אנשים?).
3. אם כן, בצע את הפעולה וסיים.
4. אחרת המשך לתא הבא.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
aCoZz 
חבר מתאריך 19.7.06
17692 הודעות
   07:43   27.03.13   
אל הפורום  
  5. כן אבל יש שם בעיה  
בתגובה להודעה מספר 4
 
   נגיד אני רוצה למחוק איבר מהאמצע..
אני חייב ליצור משתנה עזר מסוג הסטראקט ולשים בו את הראש של הסטראקט כי ברגע שאני עובר על הראש המקורי אני מאבד את המצביע לראש
הקטע שברגע שאני עובר את הסטראקט עזר אני לא מצליח להעביר את הפעולה לרשימה עצמה בסופו של דבר


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
aCoZz 
חבר מתאריך 19.7.06
17692 הודעות
   07:51   27.03.13   
אל הפורום  
  6. אוקי שרשמתי את ההודע עלה לי רעיון, מישהו יכול לאשר שזה יעבוד :  
בתגובה להודעה מספר 5
 
   ליצור שני משתנים אחד לרשימה עצמה ועד אחד נפרד לראש ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
CaTz
חבר מתאריך 2.10.04
14537 הודעות
   09:30   27.03.13   
אל הפורום  
  7. אוקיי, זה ב-C  
בתגובה להודעה מספר 6
 
   זה לא משנה יותר מידי.

אתה רוצה למחוק איבר באמצע, מה זה אומר, שנניח יש לך 5 חוליות מחוברות
יש לך מצביע לראש.
ואתה רוצה למחוק את החוליה השלישית.
מה שאתה צריך לעשות זה לשנות את המצביע של 2 להצביע ל-4.

סתם רעיון.
תחזיק מצביע נוסף לסוג הסטראקט. אותו תקדם בצעד אחד פחות...כלומר
נניח head זה מצביע לראש, prev, זה מצביע לאחד לפני מה שמצביע הראש.
כלומר הראש מצביע לחוליה 1 הPREV מצביע ל-null.
הראש ל-2, ה-prev ל-1. וכו'...
ככה, כשהראש יצביע ל-3, הprev יצביע ל-2. ומה שנותר לך לעשות.
זה שה-next של ה-prev יצביע לnext של ה-head.
פשוט.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   21:21   27.03.13   
אל הפורום  
  9. אממ זה לא מסובך..  
בתגובה להודעה מספר 5
 
   כל NODE ברשימה הוא בעצם כתובת שנמצאת איפשהו בזכרון.
הקישור שנעשה בין NODE ל NODE הוא סה"כ באמצעות מצביע.
NODE מסויים מצביע ל NODE הבא שלו.

בכדי למחוק איבר מהאמצע אתה צריך:
א. לנתק אותו מהרשימה, ולחבר את האיבר הקודם לאיבר הבא.
ב. למחוק את ההקצאה הדינמית של האיבר שניתקת.

איך תנתק אותו מהרשימה?
1. כל עוד לא הגעתי לסוף הרשימה בצע:
1.1 אם האיבר הבא שלי הוא האיבר שאני רוצה למחוק
1.1.1 שמור את האיבר הזה בצד(כדי שנוכל בסוף למחוק את ההקצאה שלו).
1.1.2 תחבר את האיבר הנוכחי לאיבר "הבא הבא".
1.1.3 מחק את האיבר ששמרת בצד.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
aCoZz 
חבר מתאריך 19.7.06
17692 הודעות
   23:27   26.03.13   
אל הפורום  
  2. שחכתי לציין את הדבר הכי חשוב המימוש הוא ב C  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
aCoZz 
חבר מתאריך 19.7.06
17692 הודעות
   16:25   27.03.13   
אל הפורום  
  8. זה מה שיצאה... יש טיפים לשיפור ?  
בתגובה להודעה מספר 0
 
   https://rotter.name/User_files/nor/515300f6182cb246.txt

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net