البرمجة

العرض الريكورسي لقائمة متسلسلة في C++

في سياق بناء قائمة متسلسلة باستخدام فئة، يمكن تحقيق طباعة المحتوى بترتيب عكسي (من الأخير إلى الأول) باستخدام دالة عرض (Display) بشكل توسعي وبشكل ريكورسيفي. لتحقيق ذلك، يمكن إضافة معامل إضافي للدالة Display يُستخدم للتحكم في الترتيب واستدعاء الدالة نفسها بشكل ريكورسي. فيما يلي توضيح لكيفية تحقيق ذلك:

cpp
// Prototype for recursive display void RecursiveDisplay(newEmployee *current); // Call the recursive display list.RecursiveDisplay(list.getHead()); /*********************************** * Print the contents of the list * ***********************************/ void EmployeeList::RecursiveDisplay(newEmployee *current) { // Base case: if the current node is null, return if (current == NULL) { cout << "\n\t\t\t ***Thank You***" << endl; return; } // Recursive case: display the next node in reverse order RecursiveDisplay(current->Next()); cout << "\t\t\t " << current->empID() << setw(13) << " " << right << "$" << setw(2) << current->ySalary() << endl; } // Function to get the head of the linked list newEmployee* EmployeeList::getHead() { return head; }

في هذا المثال، تم إضافة دالة RecursiveDisplay كدالة تكميلية للدالة Display الأصلية. يتم استدعاء RecursiveDisplay باستخدام رأس القائمة كمعامل. تقوم الدالة بفحص إذا كان العقد الحالي هو NULL (الحالة الأساسية)، فيقوم بالعودة، وإلا فإنها تقوم بفحص العقد التالي بشكل ريكورسي ومن ثم تقوم بطباعة المحتوى. باستخدام هذه الدالة، يمكنك تحقيق طباعة المحتوى بترتيب عكسي.

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

بناءً على الكود السابق، يُلاحظ أنه تم إضافة دالة جديدة تسمى RecursiveDisplay لتحقيق الطباعة العكسية بشكل ريكورسي. هذه الدالة تعتمد على مبدأ الرجوع التدريجي للقائمة المتسلسلة، حيث يتم طباعة المحتوى في الاتجاه المعاكس من الأخير إلى الأول.

يتم استخدام مبدأ الرجوع التدريجي في الدالة RecursiveDisplay بحيث تستدعي نفسها بشكل متكرر مع تقديم العقد التالي في كل استدعاء. تتوقف الريكورسية عندما يتم الوصول إلى النهاية (عندما يكون العقد NULL)، وفي هذه الحالة، يتم طباعة رسالة تشكر أخيرة.

الشيء الذي يمكن أن تضيفه لتحسين الكود هو تحسين تنسيق الإخراج أو إضافة مزيد من التعليقات التوضيحية لتوضيح الخطوات المتبعة. يمكنك أيضًا إضافة التحقق من صحة البيانات أو التفاصيل الإضافية وفقًا لاحتياجات مشروعك. على سبيل المثال، يمكنك التحقق مما إذا كانت القائمة فارغة قبل استدعاء RecursiveDisplay لتجنب أي تلاعب محتمل مع العقد NULL.

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

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

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!