البرمجة

تمثيل الرسوم البيانية باستخدام قائمة متجاورة في لغة C

في محاولتك لإنشاء قائمة متجاورة لتمثيل رسم بياني من قائمة من الحواف في ملف “input.txt”، تواجهك بعض المشاكل في التعامل مع مصفوفة الهياكل الديناميّة والتعامل مع البرنامج في وضع التصحيح والتشغيل العادي. لنقم بمراجعة الكود وتوضيح الأخطاء وتقديم بعض التعديلات.

أولًا، دعونا نناقش الدالة create_list. يبدو أن هناك بعض الأخطاء في التعامل مع مصفوفة الهياكل الدينامية. قمت باستخدام struct list* **array ولكن يجب أن تكون هذه ببساطة struct list* *array، لأن مصفوفة الهياكل هي بالفعل مؤشر.

ثانيًا، يجب أن يتم تحديد الحافظة array[i] كـ NULL في نهاية الحلقة for الأولى في main، وليس بعد الحلقة.

ثالثًا، في دالة create_list، يجب عليك التحقق مما إذا كان المؤشر *array[m] هو NULL قبل أن تقوم بالمقارنة بقيمته. يمكن أن يكون ذلك هو مصدر الخطأ الذي يؤدي إلى تعطل البرنامج.

رابعًا، في جزء آخر من سؤالك، تستفسر عن سبب تغيير الإخراج عند تشغيل البرنامج بشكل عادي. يمكن أن يكون ذلك بسبب الذاكرة المحتملة المحذوفة بين الوقت الذي يتم فيه تصحيح البرنامج والوقت الذي يتم فيه تشغيله بشكل عادي. يجب عليك التأكد من أن جميع المتغيرات تتم معالجتها بشكل صحيح في كل مرة.

بناءً على ملاحظاتنا السابقة، يمكن تعديل الكود على النحو التالي:

c
#include #include struct list { int vertex; struct list* next; }; void create_list(int v, struct list* *array); int main() { int i, v = 5; struct list *ptr, *array[v]; for (i = 0; i < v; i++) array[i] = NULL; create_list(v, array); for (i = 0; i < v; i++) { ptr = array[i]; printf("%d: ", i); while (ptr != NULL) { printf(" -> %d", ptr->vertex); ptr = ptr->next; } printf("\n"); } return 0; } void create_list(int v, struct list* *array) { int m, n; struct list *ptr, *tmp; FILE *luki; luki = fopen("input.txt", "r"); while (fscanf(luki, "%d %d\n", &m, &n) == 2) { tmp = (struct list*)malloc(sizeof(struct list)); tmp->vertex = n; tmp->next = NULL; if (array[m] == NULL) array[m] = tmp; else { ptr = array[m]; while (ptr->next != NULL) ptr = ptr->next; ptr->next = tmp; } } fclose(luki); }

تحقق من هذا التعديل وجرب تشغيل البرنامج. يجب أن يكون الكود أكثر دقة الآن، وتعتمد نتيجة البرنامج على محتوى ملف “input.txt”.

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

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

لفهم الكود بشكل أعمق، يجدر بنا التركيز على العناصر الرئيسية:

  1. الهيكل struct list:

    • يمثل كل عنصر في القائمة المتجاورة.
    • يحتوي على vertex الذي يمثل الفهرس أو العقدة في الرسم البياني.
    • يحتوي على next الذي يشير إلى العنصر التالي في القائمة.
  2. دالة create_list:

    • تقوم بفتح ملف “input.txt” لقراءة الحواف (الربط بين العقدتين).
    • تقوم بتكوين القائمة المتجاورة باستخدام الهياكل المتجاورة وتحديث المصفوفة array.
    • تحتاج إلى ضمان استخدام المؤشرات بشكل صحيح لتجنب الأخطاء في التعامل مع الذاكرة.
  3. دالة main:

    • تقوم بتهيئة المصفوفة array وتعيين كل عنصر فيها إلى NULL.
    • تقوم بالتعامل مع القائمة المتجاورة التي تم إنشاؤها وطباعتها للتحقق من صحة النتائج.

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

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

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

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

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