רשימה מקושרת בC++

zag78

New member
רשימה מקושרת בC++

יצרתי רשימה מקושרת בסיסית בC++.
הרשימה מורכבת ממחלקת List שמייצגת את הרשימה כולה, ומחלקת Node שמייצגת צומת ברשימה.
למחלקת List יש 2 פונקציות, print_list, add_node.
בתוך הmain יצרתי רשימה והוספתי לה מספר צמתים. כאשר אני מנסה להדפיס את הרשימה, התוכנית קורסת.

צירפתי את הקוד.
class Node
{
private:
int number;

public:
Node* next;
void set_number(int number)
{
this->number=number;
}
int get_number()
{
return number;
}


};

class List
{
public:
Node *head;
List(){head=NULL;}
void add_node(int number)
{
Node node;
node.set_number(number);
node.next=NULL;

if (head==NULL)
head=&node;
else
{
Node* temp=head;
for(;temp->next!=NULL;temp=temp->next){}
temp->next=&node;
}
}
void print_list()
{
if (head!=NULL)
{
Node* temp=head;
for(;temp!=NULL;)
{
cout<<" "<<temp->get_number();

temp=temp->next;

}

}


}


};
void main()
{
List list;
list.add_node(8);
list.add_node(7);
list.add_node(6);
list.add_node(5);

list.print_list();

}
 

Guy Yafe

New member
התכנית שלך לא נכונה

רשימה מקושרת היא מבנה נתונים דינמי, וככזה אתה חייב ליצור את החוליות צורה דינמית על ה - heap,כלומר אמצעות אופרטור new.
מה שעשית פוקצייה ad_node הוא ליצור אובייקט node על המחסנית, לשחק בו קצת ואז להעלים אותו מיד: ברגע שהפונקציה מסתיימת, האוביקט נעלם.
למעשה בפועל מעולם לא יצרת אובייקטים. וכל פעם שקראת פונקצייה הזו, הוספת לרשימה את אותה כתובת שממילא היא לא ולידית.

מה שאתה צריך לעשות זה ליצור אובייקט node חדש עם new ואז להוסיף אותו לרשימה.
 
למעלה