שאלה לגבי מבנה נתונים בשפת C - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


robicon

Recommended Posts

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

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

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

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

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

תודה

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


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);
}


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

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

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

ארכיון

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

×
  • צור חדש...