أنت تعمل على مشروع لتطوير نظام لجدولة القطارات في شبكة سكك حديدية مزدحمة.
طُلب منك تطوير نموذج أولي لمسارات القطارات في نظام الجدولة. يتكوّن كل مسار من تسلسل من محطات القطار التي يتوقف عندها قطار معيّن.
قرّر فريقك استخدام قائمة مترابطة مزدوجة لتمثيل كل مسار قطار في الجدول الزمني. كل محطة على طول مسار القطار ستُمثَّل بعقدة في القائمة المترابطة.
لا داعي للقلق بشأن أوقات الوصول والمغادرة في المحطات. كل محطة ستُمثَّل ببساطة بعدد.
يمكن تمديد المسارات بإضافة محطات إلى بداية المسار أو نهايته. ويمكن أيضًا تقصيرها بإزالة محطات من بداية المسار أو نهايته.
أحيانًا تُغلق إحدى المحطات، وفي هذه الحالة يجب إزالتها من المسار، حتى لو لم تكن في بداية المسار أو نهايته.
لا يُقاس حجم المسار بمدى سفر القطار، بل بعدد المحطات التي يتوقف عندها.
القائمة المترابطة بنية بيانات أساسية في علم الحاسوب، وكثيرًا ما تُستخدم في تنفيذ بنى بيانات أخرى. وكما يوحي الاسم، فهي قائمة من العقد المترابطة معًا. إنها قائمة من "العقد"، حيث ترتبط كل عقدة بجارتها أو بجيرانها. في القائمة المترابطة الأحادية ترتبط كل عقدة بالعقدة التي تليها فقط. وفي القائمة المترابطة المزدوجة ترتبط كل عقدة بالعقدة التي تسبقها، وكذلك بالعقدة التي تليها.
إذا أردت التعمق أكثر في القوائم المترابطة، فاطّلع على هذا المقال الذي يشرحها برسومات جميلة.
رغم أن القوائم المترابطة يمكن تنفيذها بطرق متنوعة وب هياكل بيانات متنوعة، فإننا نطلب هنا أن تنفّذ قائمتك المترابطة بأسلوب البرمجة كائنية التوجه (OOP).
في ملف linked_list_test.cpp، سترى أن ما يُستدعى هو صنف List قالبي.
والمطلوب منك كتابة هذا الصنف بدوال الأعضاء التالية:
push تضيف عنصرًا إلى نهاية القائمة،pop تحذف العنصر الأخير من القائمة وتُرجعـه،shift تحذف العنصر الأول من القائمة وتُرجعـه،unshift تضيف عنصرًا إلى بداية القائمة، وcount تُرجع العدد الإجمالي للعناصر في القائمة الحالية.وأخيرًا، نودّ أن تنفّذ erase إضافةً إلى الطرق المذكورة أعلاه.
ستأخذ erase وسيطًا واحدًا، وهو القيمة التي ستُحذف من القائمة المترابطة.
إذا ظهرت القيمة أكثر من مرة، فلا يجب حذف إلا أول ظهور لها.
ويجب أن تُرجع ما إذا كان قد حُذف عنصر أم لا.
ورغم أن ذلك لا يُختبر، قد ترغب في رفع استثناء إذا استُدعيت pop وshift على List فارغة.
سجّل في Exercism لتتعلّم وتتقن C++ عبر 19 مفهومًا100 تمرين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.