עבור לתוכן

שאלה לגבי מבנה נתונים בשפת C

Featured Replies

פורסם

אני רוצה לבנות מערך בגודל 5 מסוג של struct שה struct יהיה רשימה מקושרת.

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

עשיתי malloc למערך ואין לי בעיה להכניס לשם ערכים הבעיה שלי שאחר כך אני כבר לא מצליח להמשיך את הרשימה.

לדוגמה הכנסתי לתא 0 ערכים ואחר כך אני רוצה להכניס ערכים לnode הבא בתא 0 אני לא מצליח

איך אני אמור לבנות את זה מבחינת זיכרון?

תודה

פורסם

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

בוא תתחיל בצורה מסודרת. תגדיר את הstruct. תגדיר את המערך ותאתחל אותו. משם תמשיך

פורסם
  • מחבר


typedef struct flights{
int flight_num;
int flight_day;
int flight_month;
int f_hour,f_minuts,f_seconds;
int p;
int from;
int des;
flights *next;
}list[4];

הגדרתי ב main

flights *f_list[4]={0}; q

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

אני בודק אם הרשימה בתא שאני צריך להכניס אליו היא NULL אם כן אני אמור לעשות malloc לתא הזה ואז בעזרת memcpy להעתיק את המבנה לרשימה.... זה עובד אבל כאשר אני עושה malloc לתא אחד שאר התאים נעלמים...לא יודע למה

פורסם

שיש לך כפילות וקצת בלאגן.

הגדרת טיפוס list שהמשמעות שלו הוא מערך של struct flights בגודל 4. לא ברור למה עשית את זה ככה, כי אתה גם לא משתמש בטיפוס list בהמשך.

אחר-כך שים לב שf_list הוא לא מערך של flight אלא מערך של מצביעים לflights. האם זה מה שרצית?

פורסם
  • מחבר

בקשר ל list מחקתי אותו...

הבעיה עכשיו זה פשוט שאני שולח את ה f_list לפונקציה מופיעה לי רק רשימה אחת ולא 5 (במערך) שזה משהו שאף פעם לא נתקלתי בו

בקשר למצביעים...כן (לא בסדר?)

פורסם

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

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

פורסם
  • מחבר

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEST 4
#define TEL_AVIV 0
#define LONDON 1
#define ROME 2
#define ZURICH 3
#define PARIS 4
#define B747 1
#define DC10 2
#define B707 3


typedef struct flights{
int flight_num;
int flight_day;
int flight_month;
int f_hour,f_minuts,f_seconds;
int p;
int from;
int des;
flights *next;
};


void add_flight(flights f,flights *list[] ){


if(f.flight_day<0||f.flight_day>7||f.flight_month<0||f.flight_month>12){
printf("date erorr-exit the program");
exit(0);
}
if(f.f_hour<0||f.f_hour>24||f.f_minuts<0||f.f_minuts>59||f.f_seconds<0||f.f_seconds>59){
printf("time erorr-exit the program");
exit(0);
}
if(list[f.from]==NULL){
list[f.from]=(flights*)malloc(sizeof(flights));
memcpy(list[f.from],&f,sizeof(f));
return;
}
}




int main(){
flights *f_list[4];
flights one={123,3,4,12,32,22,B747,TEL_AVIV,PARIS,NULL};
flights two={125,2,1,12,35,22,B747,TEL_AVIV,LONDON,NULL};
add_flight(one,f_list);
add_flight(two,f_list);
}


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

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

פורסם
  • מחבר

הסתדרתי בסוף במימוש אחר.

תודה.

ארכיון

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

דיונים חדשים