ट्रैक
/
Python
Python
/
अभ्यास
/
लिंक्ड लिस्ट
लिंक्ड लिस्ट

लिंक्ड लिस्ट

मध्यम

परिचय

आप एक व्यस्त रेल नेटवर्क के लिए ट्रेन शेड्यूलिंग सिस्टम बनाने की परियोजना पर काम कर रहे हैं।

आपको शेड्यूलिंग सिस्टम के ट्रेन मार्गों के लिए एक प्रोटोटाइप बनाने के लिए कहा गया है। हर मार्ग ट्रेन स्टेशनों के एक ऐसे क्रम से बना होता है जहाँ एक निश्चित ट्रेन रुकती है।

निर्देश

आपकी टीम ने तय किया है कि समय-सारणी के हर ट्रेन मार्ग को दर्शाने के लिए डबली लिंक्ड लिस्ट का उपयोग किया जाएगा। ट्रेन के मार्ग पर पड़ने वाले हर स्टेशन को लिंक्ड लिस्ट में एक नोड से दर्शाया जाएगा।

आपको स्टेशनों पर पहुँचने और रवाना होने के समय की चिंता करने की ज़रूरत नहीं है। हर स्टेशन को बस एक संख्या से दर्शाया जाएगा।

मार्गों को बढ़ाया जा सकता है, यानी मार्ग के शुरू या अंत में स्टेशन जोड़े जा सकते हैं। मार्गों को छोटा भी किया जा सकता है, यानी मार्ग के शुरू या अंत से स्टेशन हटाए जा सकते हैं।

कभी-कभी कोई स्टेशन बंद हो जाता है, और ऐसी स्थिति में उस स्टेशन को मार्ग से हटाना पड़ता है, भले ही वह मार्ग के शुरू या अंत में न हो।

किसी मार्ग का आकार इस बात से नहीं नापा जाता कि ट्रेन कितनी दूर चलती है, बल्कि इस बात से कि वह कितने स्टेशनों पर रुकती है।

Note

लिंक्ड लिस्ट कंप्यूटर विज्ञान की एक बुनियादी डेटा स्ट्रक्चर है, जिसका उपयोग अक्सर दूसरी डेटा स्ट्रक्चर बनाने में होता है। जैसा कि नाम से पता चलता है, यह उन नोड की सूची है जो आपस में जुड़े होते हैं। यह "नोड" की सूची है, जहाँ हर नोड अपने पड़ोसी या पड़ोसियों से जुड़ा होता है। एक सिंगली लिंक्ड लिस्ट में हर नोड सिर्फ अपने बाद वाले नोड से जुड़ा होता है। एक डबली लिंक्ड लिस्ट में हर नोड अपने से पहले वाले नोड के साथ-साथ बाद वाले नोड से भी जुड़ा होता है।

अगर आप लिंक्ड लिस्ट के बारे में और गहराई से जानना चाहते हैं, तो यह लेख देखिए, जिसमें अच्छे चित्रों की मदद से इसे समझाया गया है।

Python में यह अभ्यास कैसे बना है

लिंक्ड लिस्ट को कई तरह के अंदरूनी डेटा स्ट्रक्चर और कई तरीकों से बनाया जा सकता है, लेकिन यहाँ हम आपसे कहते हैं कि आप अपनी लिंक्ड लिस्ट ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के तरीके से बनाइए।

स्टब फाइल में आपको एक Node क्लास और एक LinkedList क्लास की शुरुआत दिखेगी। आपकी Node क्लास को अपनी वैल्यू का हिसाब रखना चाहिए, और यह भी कि उससे पहले और बाद में कौन-से नोड आते हैं। आपके push, pop, shift, unshift, और len के लिए बनने वाला खास मेथड, ये सब LinkedList क्लास में बनाए जाने चाहिए। इटरेशन के लिए एक खास iter मेथड बनाना भी आपके काम आ सकता है।

मुख्य अभ्यास से अलग, यहाँ हम खाली LinkedLists पर pop और shift कॉल करके एरर की स्थितियाँ जाँचेंगे, इसलिए आपको एरर ठीक तरीके से raise करना होगा।

अंत में, ऊपर बताए गए मेथड के अलावा हम चाहेंगे कि आप delete भी बनाइए। delete एक आर्गुमेंट लेगा, जो वह वैल्यू है जिसे लिंक्ड लिस्ट से हटाना है। अगर वैल्यू एक से ज़्यादा बार आती है, तो सिर्फ पहली बार आने पर ही उसे हटाया जाना चाहिए।


एक्सेप्शन के संदेश

कभी-कभी कोई एक्सेप्शन raise करना ज़रूरी हो जाता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर संदेश देना चाहिए, जो बताए कि एरर का स्रोत क्या है। इससे आपका कोड पढ़ने में आसान होता है और डीबग करने में काफी मदद मिलती है। जिन स्थितियों में आप जानते हैं कि एरर का स्रोत एक खास तरह का होगा, वहाँ आप पहले से मौजूद एरर टाइप में से कोई एक चुन सकते हैं, लेकिन संदेश फिर भी अर्थपूर्ण होना चाहिए।

इस अभ्यास में आपको ValueError "फेंकने" के लिए raise स्टेटमेंट इस्तेमाल करना है, जब लिंक्ड लिस्ट में वह नोड वैल्यू न मिले जिसे delete() किया जा रहा है। इसके अलावा, अगर pop() करने के लिए कोई नोड न बचे तो IndexError फेंकना चाहिए। टेस्ट तभी पास होंगे जब आप इन exceptions को raise करेंगे और साथ में संदेश भी देंगे।

संदेश के साथ ValueError raise करने के लिए, संदेश को exception टाइप के आर्गुमेंट के रूप में लिखिए:

# When the value passed to `delete()` is not found.
if not found:
    raise ValueError("Value not found")

संदेश के साथ IndexError raise करने के लिए, संदेश को exception टाइप के आर्गुमेंट के रूप में लिखिए:

# When pop() is called and there are no nodes left in the linked list
if self.length == 0:
    raise IndexError("List is empty")

Python में खास मेथड

इस अभ्यास के टेस्ट आपकी LinkedList पर len() भी कॉल करेंगे। len() के काम करने के लिए आपको एक __len__ खास मेथड बनाना होगा। Python में खास या "डंडर" मेथड बनाने का ब्यौरा देखने के लिए Python डॉक्स: ऑब्जेक्ट को बुनियादी तरीके से कस्टमाइज़ करना और Python डॉक्स: object.len(self) देखिए।

हम यह भी सलाह देते हैं कि अपनी लिंक्ड लिस्ट पर इटरेशन करने में मदद के लिए एक खास __iter__ मेथड बनाइए।



स्रोत

कंप्यूटर विज्ञान का एक क्लासिक विषय
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Python Exercism

लिंक्ड लिस्ट शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।