আপনি একটি ব্যস্ত রেলওয়ে নেটওয়ার্কের জন্য ট্রেন শিডিউলিং সিস্টেম তৈরির একটি প্রকল্পে কাজ করছেন।
শিডিউলিং সিস্টেমের ট্রেন রুটগুলোর একটি প্রোটোটাইপ তৈরি করতে আপনাকে বলা হয়েছে। প্রতিটি রুট হলো ট্রেন স্টেশনগুলোর একটি ক্রম, যেখানে কোনো একটি নির্দিষ্ট ট্রেন থামে।
আপনার দল সিদ্ধান্ত নিয়েছে যে সময়সূচির প্রতিটি ট্রেন রুট উপস্থাপন করতে একটি ডাবলি লিংকড লিস্ট ব্যবহার করা হবে। ট্রেনের রুটের প্রতিটি স্টেশন লিংকড লিস্টের একটি নোড দিয়ে উপস্থাপন করা হবে।
স্টেশনগুলোতে আগমন ও প্রস্থানের সময় নিয়ে আপনার চিন্তা করতে হবে না। প্রতিটি স্টেশন শুধু একটি সংখ্যা দিয়ে উপস্থাপন করা হবে।
রুটগুলো সম্প্রসারিত করা যায়, রুটের শুরুতে বা শেষে স্টেশন যোগ করে। রুটের শুরু বা শেষ থেকে স্টেশন সরিয়ে এগুলো ছোটও করা যায়।
কখনো কখনো কোনো স্টেশন বন্ধ হয়ে যায়, আর সেক্ষেত্রে স্টেশনটি রুট থেকে সরিয়ে ফেলতে হয়, এমনকি সেটি রুটের শুরুতে বা শেষে না থাকলেও।
একটি রুটের আকার মাপা হয় ট্রেনটি কত দূর চলে তা দিয়ে নয়, বরং এটি কতগুলো স্টেশনে থামে তা দিয়ে।
লিংকড লিস্ট হলো কম্পিউটার সায়েন্সের একটি মৌলিক ডেটা স্ট্রাকচার, যা প্রায়ই অন্য ডেটা স্ট্রাকচার তৈরি করতে ব্যবহৃত হয়। নাম থেকেই বোঝা যায়, এটি এমন একটি লিস্ট যার নোডগুলো পরস্পর সংযুক্ত। এটি "নোড"-এর একটি লিস্ট, যেখানে প্রতিটি নোড তার প্রতিবেশী বা প্রতিবেশীদের সাথে সংযুক্ত থাকে। একটি সিঙ্গলি লিংকড লিস্ট-এ প্রতিটি নোড কেবল তার পরে আসা নোডের সাথে সংযুক্ত থাকে। একটি ডাবলি লিংকড লিস্ট-এ প্রতিটি নোড তার আগে আসা নোড এবং পরে আসা নোড, উভয়ের সাথেই সংযুক্ত থাকে।
লিংকড লিস্ট সম্পর্কে আরও গভীরে যেতে চাইলে, সুন্দর কিছু ছবি দিয়ে এটি ব্যাখ্যা করা এই নিবন্ধটি দেখুন।
লিংকড লিস্ট বিভিন্ন ধরনের অন্তর্নিহিত ডেটা স্ট্রাকচার দিয়ে নানা ভাবে ইমপ্লিমেন্ট করা যায়, তবে এখানে আমরা চাই আপনি আপনার লিংকড লিস্টটি OOP স্টাইলে ইমপ্লিমেন্ট করুন।
linked_list_test.cpp ফাইলে আপনি দেখবেন যে একটি টেমপ্লেটেড List ক্লাস কল করা হয়েছে।
আপনি এই ক্লাসটি নিচের মেম্বার ফাংশনগুলো দিয়ে লিখবেন বলে প্রত্যাশা করা হয়:
push লিস্টের শেষে একটি এলিমেন্ট যোগ করে,pop লিস্টের শেষ এলিমেন্টটি সরিয়ে ফেলে এবং সেটি রিটার্ন করে,shift লিস্টের প্রথম এলিমেন্টটি সরিয়ে ফেলে এবং সেটি রিটার্ন করে,unshift লিস্টের শুরুতে একটি এলিমেন্ট যোগ করে, আরcount বর্তমান লিস্টে মোট কতগুলো এলিমেন্ট আছে তা রিটার্ন করে।সবশেষে, উপরে উল্লেখিত মেথডগুলোর পাশাপাশি আমরা চাই আপনি erase-ও ইমপ্লিমেন্ট করুন।
erase একটি আর্গুমেন্ট নেবে, যেটি হলো লিংকড লিস্ট থেকে সরিয়ে ফেলার মান।
যদি মানটি একবারের বেশি থাকে, তবে শুধু প্রথম বারটিই সরিয়ে ফেলা হবে।
এটি রিটার্ন করবে যে একটি এলিমেন্ট সরানো হয়েছিল কি না।
যদিও এটি টেস্ট করা হয় না, তবুও খালি List-এর ওপর pop আর shift কল করলে আপনি একটি এক্সেপশন রেইজ করতে চাইতে পারেন।
Exercism-এ সাইন আপ করুন, C++ ট্র্যাকের 19টি কনসেপ্ট100টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।