سؤال
هل يمكن لأحد أن يشرح هذا؟
struct node
{
int data;
struct node * link;
}
main()
{
struct node *p, *list, *temp;
list = p = temp = NULL;
.........................
.........................
}
addbeg()
{
int x;
temp=malloc(sizeof(struct node));
scanf("%d", &x);
temp->data=x;
temp->link = list;
list=temp;
}
هذا رمز لإدخال البيانات في القائمة المرتبطة من خلال لغة C.الكود غير كامل ولكن أعتقد أنه كافي لهذا الغرض.يرجى شرح الترميز بشكل أساسي على هذه السطور:
temp=malloc(sizeof(struct node));
و
temp->link = list;
list=temp;.
المحلول
malloc()
يستخدم لتخصيص الذاكرة - في هذه الحالة لعقدة جديدة.
ال addbeg()
الوظيفة المحددة في التعليمات البرمجية الخاصة بك تقوم بما يلي:
- يحدد متغير مؤقت
x
. - يخصص مساحة لعقدة جديدة.
- إدخال عدد صحيح (
%d
رمز لscanf
) ويخزنها فيهx
. - يخزن القيمة التي تم حفظها فيها
x
في حقل البيانات للعقدة المخصصة حديثًا. - يخزن "الرأس" القديم للقائمة المشار إليها بواسطة المتغير '
list
"كرابط في العقدة المخصصة حديثًا. - يضبط العقدة الجديدة لتكون الرأس الجديد للقائمة المخزنة في المتغير '
list
'.
إنه تطبيق أساسي جدًا لقائمة مرتبطة (http://en.wikipedia.org/wiki/Linked_list) من الأعداد الصحيحة.
نصائح أخرى
والسطر الأول: تخصيص الذاكرة لعقدة إضافية واحدة من قائمة
والسطر الثاني: إرفاق القائمة الحالية باعتبارها استمرارا بعد هذا العنصر
.والسطر الثالث: جعل العنصر الحالي بداية من قائمة
.ودرجة الحرارة والقائمة ليست واضحة في addbeg، منذ انهم أعلن في main. أنها تحتاج إما لتمريرها في لaddbeg أو أعلن خارج الرئيسي (العالمي، يوك).
وmalloc يخصص مساحة لعقدة جديدة.
temp->link = list
و
list = temp
ويجعل تلك العقدة الجديدة رأس القائمة.