ট্র্যাক
/
Lean
Lean
/
অনুশীলনী
/
লিংকড লিস্ট
লিংকড লিস্ট

লিংকড লিস্ট

কঠিন

ভূমিকা

আপনি একটি ব্যস্ত রেলওয়ে নেটওয়ার্কের জন্য ট্রেন শিডিউলিং সিস্টেম তৈরির একটি প্রকল্পে কাজ করছেন।

শিডিউলিং সিস্টেমের ট্রেন রুটগুলোর একটি প্রোটোটাইপ তৈরি করতে আপনাকে বলা হয়েছে। প্রতিটি রুট হলো ট্রেন স্টেশনগুলোর একটি ক্রম, যেখানে কোনো একটি নির্দিষ্ট ট্রেন থামে।

নির্দেশনা

আপনার দল সিদ্ধান্ত নিয়েছে যে সময়সূচির প্রতিটি ট্রেন রুট উপস্থাপন করতে একটি ডাবলি লিংকড লিস্ট ব্যবহার করা হবে। ট্রেনের রুটের প্রতিটি স্টেশন লিংকড লিস্টের একটি নোড দিয়ে উপস্থাপন করা হবে।

স্টেশনগুলোতে আগমন ও প্রস্থানের সময় নিয়ে আপনার চিন্তা করতে হবে না। প্রতিটি স্টেশন শুধু একটি সংখ্যা দিয়ে উপস্থাপন করা হবে।

রুটগুলো সম্প্রসারিত করা যায়, রুটের শুরুতে বা শেষে স্টেশন যোগ করে। রুটের শুরু বা শেষ থেকে স্টেশন সরিয়ে এগুলো ছোটও করা যায়।

কখনো কখনো কোনো স্টেশন বন্ধ হয়ে যায়, আর সেক্ষেত্রে স্টেশনটি রুট থেকে সরিয়ে ফেলতে হয়, এমনকি সেটি রুটের শুরুতে বা শেষে না থাকলেও।

একটি রুটের আকার মাপা হয় ট্রেনটি কত দূর চলে তা দিয়ে নয়, বরং এটি কতগুলো স্টেশনে থামে তা দিয়ে।

Note

লিংকড লিস্ট হলো কম্পিউটার সায়েন্সের একটি মৌলিক ডেটা স্ট্রাকচার, যা প্রায়ই অন্য ডেটা স্ট্রাকচার তৈরি করতে ব্যবহৃত হয়। নাম থেকেই বোঝা যায়, এটি এমন একটি লিস্ট যার নোডগুলো পরস্পর সংযুক্ত। এটি "নোড"-এর একটি লিস্ট, যেখানে প্রতিটি নোড তার প্রতিবেশী বা প্রতিবেশীদের সাথে সংযুক্ত থাকে। একটি সিঙ্গলি লিংকড লিস্ট-এ প্রতিটি নোড কেবল তার পরে আসা নোডের সাথে সংযুক্ত থাকে। একটি ডাবলি লিংকড লিস্ট-এ প্রতিটি নোড তার আগে আসা নোড এবং পরে আসা নোড, উভয়ের সাথেই সংযুক্ত থাকে।

লিংকড লিস্ট সম্পর্কে আরও গভীরে যেতে চাইলে, সুন্দর কিছু ছবি দিয়ে এটি ব্যাখ্যা করা এই নিবন্ধটি দেখুন।

স্টেটফুল ডেটা স্ট্রাকচার

ফাংশনাল ভাষায়, যেমন Lean-এ, বেশিরভাগ মানই ডিজাইনগতভাবেই ইমিউটেবল। এর মানে হলো, আপডেট সাধারণত একটি নতুন মান তৈরি করে করা হয়। পুরনো ও নতুন, দুটি মানই একসাথে থাকে এবং দুটিকেই রেফারেন্স করা ও ব্যবহার করা যায়।

তবে এমন অনেক পরিস্থিতি আছে যেখানে একটি স্টেটফুল মান দরকার হয়, বা এমনকি অপরিহার্যও হয়ে পড়ে। স্টেটফুল মান মিউটেশনের মাধ্যমে আপডেট হয়, অর্থাৎ নতুন একটি মান তৈরি না করে পুরনো মানটিকেই রিপ্লেস করা হয়। একটি মিউটেশনের পর শুধু আপডেট হওয়া মানটিই অ্যাক্সেসযোগ্য থাকে।

মনে রাখবেন, মিউটেশন ভাষার কিছু গ্যারান্টি ভেঙে দিতে পারে। একটি পিওর ফাংশনকে একই সেট ইনপুটের জন্য সবসময় একই ফলাফল রিটার্ন করতে হয়, কিন্তু কোনো ইনপুট যদি সময়ের সাথে বদলে যেতে পারে, তাহলে একই আর্গুমেন্ট দিয়ে কল করলেও ফাংশনটি ভিন্ন ফলাফল রিটার্ন করতে পারে। একইভাবে, কোনো ফাংশন যদি ফলাফল রিটার্ন করা ছাড়াও বাইরের কোনো পরিবর্তন ঘটাতে পারে, বা তার প্যারামিটার ছাড়া অন্য কোনো সোর্স থেকে পড়তে পারে, তাহলে একই ফাংশনের দুটি কলের ফলাফল ভিন্ন হতে পারে, আর কখনো কখনো তা অনির্দেশ্য হয়ে পড়ে।

এমন স্টেটফুল আচরণ সামলাতে Lean, অন্য ফাংশনাল ভাষাগুলোর মতোই, দাবি করে যে এফেক্টফুল ফাংশনগুলোকে এমন এক বিশেষ ধরনের স্ট্রাকচারে মুড়ে দিতে হবে, যা তাদের পিওর ফাংশন থেকে আলাদা করে। এই স্ট্রাকচারগুলোকেই মোনাড বলা হয়।

একটা কথা মনে রাখা জরুরি: প্রতিটি স্টেটফুল মান যদিও কোনো একটা এফেক্টফুল মোনাডের ভেতরে থাকে, তবু প্রতিটি মোনাড মিউটেবল স্টেট বোঝায় না। "পিওর" মোনাডের উল্লেখযোগ্য উদাহরণ হলো Option, Except আর Id।

এই অনুশীলনীতে আপনি LinkedList নামের একটি স্টেটফুল ডেটা স্ট্রাকচার ডিফাইন করবেন। এই ডেটা স্ট্রাকচারের ইনস্ট্যান্সগুলো মিউটেশনের মাধ্যমে আপডেট হয়।

এটা সমর্থন করার জন্য সব ফাংশনই ST মোনাডের ভেতরে মুড়ে দেওয়া হয়েছে। এই মোনাডে মিউটেবল স্টেটই একমাত্র সাইড এফেক্ট, আর মিউটেবল রেফারেন্স এখান থেকে বেরিয়ে যেতে পারে না। আরও তথ্যের জন্য আপনি রেফারেন্স দেখতে পারেন।


সূত্র

কম্পিউটার সায়েন্সের একটি চিরায়ত বিষয়
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Lean Exercism

লিংকড লিস্ট শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Lean ট্র্যাকের 100টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।