נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: שמירת רשימה מקושרת בקובץ שפת C

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
לירן
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 01 August 2007 בשעה 21:33 | IP רשוּם
ציטוט לירן

אני כותב בC

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

זה תרגיל וזהו אילוץ - המבנה חייב להיות בנוי בצורה הזו!

עכשיו מגיעה הבעיה אני צריך לשמור את המידע בקובץ בינארי.

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

אם אני עושה sizeof(struct),1 זה נותן את הגודל בבתים של כל המבנה פלוס 2 או 4 בתים על התא הראשון שעליו מצביעה הרשימה.. אבל הרשימה כמובן כוללת עוד תאים..

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

תודה רבה לכל העונים..

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

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 01 August 2007 בשעה 23:16 | IP רשוּם
ציטוט shoshan

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 02 August 2007 בשעה 00:49 | IP רשוּם
ציטוט לירן

אני לא בטוח שהבנתי

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

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

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

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 02 August 2007 בשעה 01:01 | IP רשוּם
ציטוט shoshan

כן, לזה התכוונתי, ובכל מקרה אם תשמור את כל המבנה וזה מבנה בגודל דינאמי מה שתשמור יהיה בגודל דינאמי (ברור, לא?)

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 02 August 2007 בשעה 02:41 | IP רשוּם
ציטוט לירן

אני פשוט חשבתי שיש אפשרות לגשת נניח לעובד העשירי ע"י 9* גודל מסויים

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

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

תודה רבה

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

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 02 August 2007 בשעה 11:32 | IP רשוּם
ציטוט shoshan

כן, בערך כמו רשימה מקושרת, אבל אם האפשרות לקרוא ישר את העובד ה-N חיונית לך אתה
יכול לשמור טבלה של מיקומי עובדים ולגשת את העובד יותר מהר (מהטבלה אתה יכול לקרוא
מיקום ב-o(1) ואז לקרוא את העובד ישר מאיפה שהוא בזכרון)

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 02 August 2007 בשעה 14:27 | IP רשוּם
ציטוט לירן

תודה תודה

עזרת לי

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

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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