עזרה הדפסת ערכים ברשימה מקושרת (שפת C) - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה הדפסת ערכים ברשימה מקושרת (שפת C)


TheSlider

Recommended Posts

היי חברים,

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

זה המבנה:

typedef struct item
{
int data;
struct item* next;
} sItem;

זאת כותרת הפונקציה:

void print_list(sItem* head)

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

תודה רבה חברים!

קישור לתוכן
שתף באתרים אחרים

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

1. להדפיס את האיבר הנוכחי ברשימה.

2. לעבור לאיבר הבא ברשימה.

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

קישור לתוכן
שתף באתרים אחרים

אוקי, כתבתי את הפונקציה הבאה:


void print_list(sItem* head)
{
while (head!=NULL)
{
printf("%d\n",head->data);
head=head->next;
}
}

מה שאני לא מבין זה איך אני עושה שהשדה next יצביע על האיבר הבא ברשימה המקושרת.

כלומר נניח שיש לי רשימה מקושרת עם 5 איברים, איך השדה next יודע כל פעם להצביע לאיבר הבא ברשימה ואם אין איבר שם אז הוא יכיל NULL?

לא מצאתי מידע על אתחול רשימה מקושרת או שאני לגמרי לא מבין את הרעיון של רשימה מקושרת והשדה next מקבל את הערכים בעת הגדרת הרשימה?

קישור לתוכן
שתף באתרים אחרים

נראה לי שאתה לא מבין עד הסוף את איך בנויה רשימה מקושרת.

הרשימה במקרה שלך מורכבת מ-5 איברים שכל אחד מהם כולל שדה next משלו והשדה הזה מצביע לאיבר הבא.

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

את התאוריה אני מבין, כל מצגת הקורס מלאה בהסברים תאורטיים בלבד.

השאלה שלי היא: איך השדה next יודע להצביע על האיבר/הקרון/וכו' הבא אם אני לא הגדרתי לו אל מי להצביע?

ראיתי שאם אני מבין את זה אז כל הרשימות המקושרות נהיה לי ברור מאוד.

תודה רבה חברים!

קישור לתוכן
שתף באתרים אחרים

מן הסתם הוא לא ידע לאן להצביע ללא שתאמר לו, זו בסה"כ מכונה...

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

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

קישור לתוכן
שתף באתרים אחרים

יכול להיות שבנייה של הפונקציה בצורה רקורסיבית תהיה לך יותר פשוטה להבנה.

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...