פורסם 2012 בדצמבר 2912 שנים אני עושה עבודה עם רשימה מקושרת גנרית. ככה נראה ה node שליvoid* datanode *nextיש לי רשימה מקושרת של סוכנים שה data שלהם הוא char* ויש לכל סוכן כזה רשימה מקושרת של נסיעות.יש לי בעיה עם ההדפסה של הרשימה המקושרת של הנסיעות.בתוך הפונקציה שיוצרת את הסוכן ומוסיפה אותו לרשימה המקושרת אני מצליח להדפיס ללא בעיה את הרשימה המקושרת של הנסיעות של אותו סוכן.הבעיה היא מוחוץ לאותה הפונקציה. זה מדפיס לי הכל ב ג'יבריש.ניסיתי כבר הכל לא יודע מה לעשות.זה הפונקציית הוספה של הסוכן לרשימהvoid create_agent(LinkedList* list, char* final,char* a){ Node* n; char *s;Agent* new=(Agent*)malloc(sizeof(Agent));new->id=(char*)malloc(sizeof(char)*17);strcpy(new->id,a);new->travel=create_list();linkedListAdd(new->travel, final);//s=(char*) get_data_from_head(new->travel);//printf("%s",s);linkedListAdd(list, new);}וזה הפונקציות של הרשימה המקושרת[code]LinkedList* create_list();void linkedListDestroy(LinkedList * list);void linkedListAdd(LinkedList *, void * data);void *linkedListFind(LinkedList * list, void * data,compare_key cmp);void linkedListRemove(LinkedList * list, void * data, compare_key cmp);void* get_data(Node* n);void* get_data_from_head(LinkedList* l);בבקשה עזרה
פורסם 2012 בדצמבר 2912 שנים ערוך את הכותרת כך שתכיל את תמצית השאלה.חוץ מזה, אי אפשר ממש לדעת מה הבעיה בלי לראות את המימוש של הרשימה המקושרת. על פניו הקוד נראה תקין. ניסית לדבג את התוכנית?
פורסם 2012 בדצמבר 2912 שנים מחבר הנה המימוש של הרשימה. בדקתי אותה והיא עובדת.הבעיה היא במשהו שאין לי מושג מה. שתי הפונקציות האחרונות זה פונקציות עזר.typedef struct Node{ void *data; struct Node* next;}Node;typedef struct LinkedList { Node *head;}LinkedList;LinkedList* create_list() { LinkedList *list = (LinkedList *) malloc(sizeof (LinkedList)); list->head = NULL; return list;}void linkedListDestroy(LinkedList * list){ Node* tmp1= list->head; Node* tmp2; while(tmp1!=NULL) { tmp2=tmp1; tmp1=tmp1->next; free(tmp2->data); free(tmp2);}}void linkedListAdd(LinkedList* list, void * data){ Node* new=(Node*)malloc(sizeof(Node)); new->data=data; new->next=list->head; list->head=new;}void *linkedListFind(LinkedList * list, void * data,compare_key cmp){ Node* temp=list->head; while(temp!=NULL){ if(cmp(data,temp->data)==0) return temp; temp=temp->next; } return NULL;}void linkedListRemove(LinkedList * list, void * data, compare_key cmp){ Node* temp=list->head; Node* deleted; //if the deleted element is the head if(cmp(temp->data,data)==0){ list->head=temp->next; free(temp); return; } while(temp!=NULL){ //if the deleted element is the last element in the list if(cmp(temp->next->data,data)==0 && temp->next->next==NULL){ deleted=temp->next; free(deleted); return; } if(cmp(temp->next->data,data)==0){ deleted=temp->next; temp->next=temp->next->next; free(deleted); return; } temp=temp->next; } return ;}void* get_data(Node* n){ return n->data;}void* get_data_from_head(LinkedList* l){ return l->head->data;}
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.