आप एक व्यस्त रेल नेटवर्क के लिए ट्रेन शेड्यूलिंग सिस्टम बनाने की परियोजना पर काम कर रहे हैं।
आपको शेड्यूलिंग सिस्टम के ट्रेन मार्गों के लिए एक प्रोटोटाइप बनाने के लिए कहा गया है। हर मार्ग ट्रेन स्टेशनों के एक ऐसे क्रम से बना होता है जहाँ एक निश्चित ट्रेन रुकती है।
आपकी टीम ने तय किया है कि समय-सारणी के हर ट्रेन मार्ग को दर्शाने के लिए डबली लिंक्ड लिस्ट का उपयोग किया जाएगा। ट्रेन के मार्ग पर पड़ने वाले हर स्टेशन को लिंक्ड लिस्ट में एक नोड से दर्शाया जाएगा।
आपको स्टेशनों पर पहुँचने और रवाना होने के समय की चिंता करने की ज़रूरत नहीं है। हर स्टेशन को बस एक संख्या से दर्शाया जाएगा।
मार्गों को बढ़ाया जा सकता है, यानी मार्ग के शुरू या अंत में स्टेशन जोड़े जा सकते हैं। मार्गों को छोटा भी किया जा सकता है, यानी मार्ग के शुरू या अंत से स्टेशन हटाए जा सकते हैं।
कभी-कभी कोई स्टेशन बंद हो जाता है, और ऐसी स्थिति में उस स्टेशन को मार्ग से हटाना पड़ता है, भले ही वह मार्ग के शुरू या अंत में न हो।
किसी मार्ग का आकार इस बात से नहीं नापा जाता कि ट्रेन कितनी दूर चलती है, बल्कि इस बात से कि वह कितने स्टेशनों पर रुकती है।
लिंक्ड लिस्ट कंप्यूटर विज्ञान की एक बुनियादी डेटा स्ट्रक्चर है, जिसका उपयोग अक्सर दूसरी डेटा स्ट्रक्चर बनाने में होता है। जैसा कि नाम से पता चलता है, यह उन नोड की सूची है जो आपस में जुड़े होते हैं। यह "नोड" की सूची है, जहाँ हर नोड अपने पड़ोसी या पड़ोसियों से जुड़ा होता है। एक सिंगली लिंक्ड लिस्ट में हर नोड सिर्फ अपने बाद वाले नोड से जुड़ा होता है। एक डबली लिंक्ड लिस्ट में हर नोड अपने से पहले वाले नोड के साथ-साथ बाद वाले नोड से भी जुड़ा होता है।
अगर आप लिंक्ड लिस्ट के बारे में और गहराई से जानना चाहते हैं, तो यह लेख देखिए, जिसमें अच्छे चित्रों की मदद से इसे समझाया गया है।
लिंक्ड लिस्ट को कई तरीकों से और कई तरह के अंतर्निहित डेटा स्ट्रक्चर के साथ बनाया जा सकता है। लेकिन यहाँ हम चाहते हैं कि आप अपनी लिंक्ड लिस्ट को ऑब्जेक्ट-ओरिएंटेड तरीके से बनाइए।
linked_list_test.cpp फाइल में आप देखेंगे कि एक टेम्पलेट वाली List क्लास कॉल की जाती है।
आपको इस क्लास में ये मेंबर फंक्शन लिखने हैं:
push लिंक्ड लिस्ट के अंत में एक एलिमेंट जोड़ता है,pop लिंक्ड लिस्ट का अंतिम एलिमेंट हटाता है और उसे लौटाता है,shift लिंक्ड लिस्ट का पहला एलिमेंट हटाता है और उसे लौटाता है,unshift लिंक्ड लिस्ट की शुरुआत में एक एलिमेंट जोड़ता है, औरcount मौजूदा लिंक्ड लिस्ट में एलिमेंट की कुल संख्या लौटाता है।अंत में, ऊपर बताए गए फंक्शन के अलावा हम चाहते हैं कि आप erase भी बनाइए।
erase एक आर्गुमेंट लेगा, जो वह वैल्यू है जिसे लिंक्ड लिस्ट से हटाना है।
अगर वैल्यू एक से अधिक बार आती है, तो केवल पहली बार आने वाली वैल्यू ही हटाई जानी चाहिए।
इसे यह भी लौटाना चाहिए कि कोई एलिमेंट हटाया गया या नहीं।
हालाँकि इसकी जाँच नहीं होती, फिर भी खाली List पर pop और shift कॉल करने पर आप चाहें तो एक्सेप्शन उठा सकते हैं।
Exercism पर साइन अप कीजिए और C++ को 19 कॉन्सेप्ट100 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।