עבור לתוכן

בעיה בהדפסה של רשימה מקושרת גנרית

Featured Replies

פורסם

אני עושה עבודה עם רשימה מקושרת גנרית.

ככה נראה ה node שלי

void* data

node *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);

בבקשה עזרה

פורסם

ערוך את הכותרת כך שתכיל את תמצית השאלה.

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

פורסם
  • מחבר

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


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

פורסם

אני מבקש ממך שוב:

ערוך את הכותרת כך שתכיל את תמצית השאלה.

פורסם

הקוד הזה נראה תקין. איפה בכלל הקוד שמדפיס לך ג'יבריש?

ארכיון

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

דיונים חדשים