البرمجة

قوائم مرتبطة في لغة C

المشكلة التي تواجهها في برنامجك تتعلق بكيفية تخزين البيانات في القائمة المرتبطة. في الواقع، السبب في عدم عرض جميع القيم بشكل صحيح هو أنك تستخدم نفس المؤشر لـ p->next في كل إضافة جديدة للعناصر إلى القائمة.

عندما تقوم بإنشاء عنصر جديد في الدالة inserti، يجب عليك أن تحجز مساحة جديدة للعنصر القادم next، وليس استخدام نفس المساحة في كل مرة. هذا يعني أنك تحتاج إلى تغيير السطر:

c
if(*head!=NULL) p->next=*head;

إلى:

c
p->next = *head;

بهذه الطريقة، ستنشئ مساحة جديدة لكل عنصر تقوم بإضافته إلى القائمة، وستكون القائمة تعمل بشكل صحيح وتعرض كل القيم بشكل صحيح.

المزيد من المعلومات

بالطبع! يبدو أنك تستخدم الدالة strtok لتقسيم السلاسل إلى جزئين باستخدام فاصلة ,. ومن الجيد أيضًا أنك تقوم بإنشاء عنصر جديد llist لكل سطر في الملف CSV وتقوم بإضافته إلى القائمة المرتبطة.

ومن المهم أيضًا أن تتحقق من إغلاق الملف بعد الانتهاء من استخدامه باستخدام fclose(fp) في نهاية الدالة main، وهذا ما تقوم به بالفعل.

واحدة من التحسينات التي يمكنك تطبيقها هي استخدام دالة strdup لنسخ السلاسل المقسمة بواسطة strtok، بدلاً من استخدام مؤشرات char* مباشرة. هذا يمكن أن يمنع بعض المشاكل المحتملة في تعاملك مع السلاسل.

على سبيل المثال، يمكنك تحسين الجزء الخاص بالتبديل في inserti كالتالي:

c
case 0: p->d.dat = strdup(tok); break; case 1: p->d.uname = strdup(tok); break;

لكن لا تنسى أن تحرر الذاكرة المخصصة للسلاسل عندما تكون قد انتهيت من استخدامها في القائمة المرتبطة.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر