जेसन Hirschhorn: हर कोई आपका स्वागत है धारा सात के लिए. हम निश्चित रूप से सप्ताह सात में हैं. और यह आगामी गुरुवार हेलोवीन तो मैं हूँ एक कद्दू की तरह कपड़े पहने. मैं मोड़ पर और पर नहीं डाल सकता है मैं क्यों हूँ मेरे जूते, इतना है कि बस मोजे पहने. मैं भी नीचे कुछ भी नहीं पहन रहा हूँ अगर यह इस, तो मैं इसे बंद नहीं कर सकते आप को ध्यान भंग. मैं उसके लिए माफी मांगना. आप कल्पना करने की जरूरत नहीं है क्या हो रहा है. मैं मुक्केबाज पहने हैं. तो यह सब अच्छा है. मुझे लगता है मैं कर रहा हूँ के बारे में क्यों एक लंबी कहानी है एक कद्दू के रूप में तैयार है, लेकिन मैं जा रहा हूँ बाद में इस खंड में के लिए कि बचा मैं शुरू करने के लिए करना चाहते हैं क्योंकि. हम रोमांचक चीज़ों में से एक बहुत कुछ है इस सप्ताह खत्म हो जाने के लिए. उनमें से ज्यादातर इस के लिए सीधे संबंधित हफ्ते की समस्या सेट, गलत वर्तनी. हमारा सहबद्ध ऊपर जा रहा हो जा रहे हैं सूचियों और हैश तालिकाओं पूरे खंड के लिए. मैं हर हफ्ते की एक सूची इस सूची लगाई आप के साथ मदद करने के लिए संसाधनों इस कोर्स पर सामग्री. एक नुकसान में या अगर हैं तो कुछ की तलाश में अधिक जानकारी, में से एक की जाँच इन संसाधनों. फिर, pset6 गलत वर्तनी है, इस सप्ताह के pset. और यह भी आप को प्रोत्साहित करती है, और मैं कुछ अन्य का उपयोग करने के लिए आपको प्रोत्साहित करते हैं संसाधनों विशेष रूप से इस pset के लिए. विशेष रूप से, तीन मैं स्क्रीन पर सूचीबद्ध - हम से परिचित किया गया है जो GDB, और अब थोड़ी देर के लिए उपयोग किया गया है, इस सप्ताह बहुत उपयोगी होने जा रहा. इसलिए मुझे लगता है कि यहाँ के ऊपर डाल दिया. लेकिन जब भी तुम सी के साथ काम कर रहे हैं, आप हमेशा GDB के लिए उपयोग किया जाना चाहिए अपने कार्यक्रमों डिबग. इस सप्ताह भी valgrind. किसी को भी वेलग्रिंड क्या करता है पता है? दर्शक: यह स्मृति लीक के लिए जाँच करता है? जेसन Hirschhorn: वेलग्रिंड स्मृति लीक के लिए जाँच करता है. तो अगर आप malloc कुछ अपने कार्यक्रम, आप स्मृति के लिए पूछ रहे हैं. अपने कार्यक्रम के अंत में, आपके पास आपने सब कुछ पर मुक्त लिखने के लिए वापस स्मृति देने के लिए malloced. तुम अंत में मुक्त लिखने के लिए और नहीं करते हैं अपने कार्यक्रम के एक निष्कर्ष पर आता है, सब कुछ स्वचालित रूप से होगा मुक्त हो. और छोटे कार्यक्रमों के लिए, यह है इतना बड़ा नहीं एक सौदा. लेकिन अगर आप एक लंबे समय तक चल रहा है लिख रहे हैं इस्तीफा नहीं करता है कि कार्यक्रम, जरूरी मिनट या एक के एक जोड़े में सेकंड की जोड़ी, फिर स्मृति लीक एक बहुत बड़ा सौदा बन सकता है. तो pset6 के लिए, उम्मीद है कि आप के साथ शून्य स्मृति लीक होगा अपने कार्यक्रम. स्मृति लीक के लिए जांच करने के लिए चलाने वेलग्रिंड और यह आपको कुछ अच्छा दे दूँगा उत्पादन आपको पता है कि क्या दे या सब कुछ मुफ्त नहीं था. हम बाद में इसके साथ अभ्यास करेंगे आज, उम्मीद है. अंत में, रचनाकार आदेश. आप इसे करने के लिए कुछ इसी तरह का प्रयोग किया झांकना उपकरण के साथ pset5 में. आप के अंदर देखने के लिए अनुमति दी. तुम भी प्रति भी है, रचनाकार इस्तेमाल किया समस्या कल्पना निर्धारित किया है. लेकिन में आप की अनुमति दी दो फ़ाइलों की तुलना करें. आप बिटमैप फ़ाइल और तुलना कर सकता है जानकारी एक कर्मचारी समाधान के हेडर और pset5 में अपने समाधान अगर आप इसका इस्तेमाल करने के लिए चुना है. डिफ आप करने की अनुमति देगा साथ ही, ऐसा करते हो. आप के लिए सही जवाब तुलना कर सकते हैं अपने जवाब के लिए सेट इस हफ्ते की समस्या और देखो अगर यह ऊपर लाइनों या देखना त्रुटियाँ हैं जहां. तो उन तीन अच्छे उपकरण हैं कि आप इस सप्ताह के लिए उपयोग करना चाहिए, और निश्चित रूप से अपने कार्यक्रम की जांच इन तीन उपकरणों के साथ यह अंदर की ओर से पहले फिर, मैं हर हफ्ते उल्लेख किया है, दोनों - आप मेरे लिए कोई प्रतिक्रिया हो, तो सकारात्मक और रचनात्मक - वेबसाइट के लिए सिर करने के लिए स्वतंत्र महसूस इस स्लाइड के तल पर और वहाँ इनपुट यह. मैं वास्तव में किसी भी सराहना और सभी प्रतिक्रिया. और तुम मुझे विशिष्ट चीजें देते हैं कि मुझे लगता है मैं कर रहा हूँ कि में सुधार कर सकते हैं या तुम मुझे पसंद है कि अच्छी तरह से कर रही मैं दिल को ले और, जारी सच सुनने के लिए कड़ी मेहनत की कोशिश आपकी प्रतिक्रिया के लिए. मुझे लगता है मैं क्या करने जा रहा हूँ वादा नहीं कर सकता सब कुछ है, हालांकि, एक पहनने की तरह हर हफ्ते पोशाक कद्दू. इसलिए हम थोक के खर्च करने के लिए जा रहे हैं अनुभाग, मैं उल्लेख किया है, के बारे में बात लिंक सूचियों और हैश तालिकाओं, जो करने के लिए सीधे लागू होगी समस्या इस सप्ताह निर्धारित किया है. लिंक सूचियों हम अपेक्षाकृत पर जायेंगे हम एक निष्पक्ष बिट बिताया है जल्दी क्योंकि समय की धारा में यह ऊपर जा रहा है. और इसलिए हम सीधे में मिल जाएगा लिंक सूचियों के लिए समस्याओं कोडन. और फिर अंत में हम के बारे में बात करेंगे वे इस पर कैसे लागू टेबल हैश और हफ्ते की समस्या निर्धारित किया है. इससे पहले कि आप इस कोड को देखा है. यह एक संरचना है, और यह परिभाषित है कुछ नया एक नोड कहा जाता है. और एक नोड के अंदर एक पूर्णांक है यहीं और के लिए एक संकेत है अन्य नोड. हम पहले यह देखा है. इस के लिए आ गया है अब कुछ हफ़्ते. यह हम किया गया है जो संकेत दिए, को जोड़ती है जो की अनुमति, और structs के साथ काम करना हमें दो अलग गठबंधन करने के लिए एक डेटा प्रकार में बातें. स्क्रीन पर चल रहा एक बहुत कुछ है. लेकिन यह सब अपेक्षाकृत होना चाहिए आप के साथ परिचित. पहली पंक्ति पर, हम एक नए नोड की घोषणा. और फिर उस नए नोड के अंदर, मैं सेट एक करने के लिए कि नोड में पूर्णांक. हम मैं एक कर रहा हूँ अगली पंक्ति पर देखते हैं printf आदेश, लेकिन मैं धूसर हो गया है printf आदेश वास्तव में, क्योंकि महत्वपूर्ण हिस्सा यहाँ इस पंक्ति है - new_node.n. डॉट का क्या मतलब है? दर्शक: नोड के पास जाओ और इसके लिए एन मूल्य का आकलन करें. जेसन Hirschhorn: यह है बिल्कुल सही. डॉट n हिस्सा उपयोग का मतलब इस नए नोड की. यह अगली पंक्ति क्या करता है? माइकल. दर्शक: यह एक और नोड बनाता है कि नए नोड के लिए बात करेंगे. जेसन Hirschhorn: तो यह नहीं करता एक नए नोड बनाएँ. यह एक क्या बनाता है? दर्शक: एक सूचक. जेसन Hirschhorn: एक नोड के लिए एक सूचक, यहाँ इस नोड * द्वारा संकेत के रूप में. तो यह एक नोड के लिए एक संकेत पैदा करता है. और जो नोड यह इशारा कर रहा है माइकल, करने के लिए? दर्शक: नए नोड? जेसन Hirschhorn: नए नोड. हम है और यह इसलिए क्योंकि वहाँ इशारा कर रहा है यह नया नोड का पता दिया. और अब इस लाइन में हम देखते हैं के दो अलग अलग तरीकों एक ही बात को व्यक्त. और मैं बात करना चाहता था कि कैसे इन दो बातें समान हैं. पहली पंक्ति में, हम भिन्नता सूचक. इसलिए हम नोड के पास जाओ. यही कारण है कि इस स्टार का मतलब क्या है. हम संकेत के साथ पहले कि देखा है. नोड के लिए जाओ. उस कोष्ठक में है. और फिर डॉट ऑपरेटर के माध्यम का उपयोग कि नोड के एन तत्व. इसलिए कि वाक्यविन्यास ले जा रहा है हम यहीं देखी थी और अब एक सूचक के साथ प्रयोग. बेशक, यह अगर व्यस्त की तरह हो जाता है आप उन कोष्ठकों लिख रहे हैं - उस स्टार और कहा कि डॉट. यह थोड़ा व्यस्त हो जाता है. इसलिए हम कुछ वाक्यात्मक चीनी है. और यहीं से इस लाइन - ptr_node-> एन. यही कारण है कि एक ही सटीक बात करता है. तो कोड के उन दो लाइनें हैं बराबर और क्या करेंगे ठीक ऐसा ही. लेकिन मैं पहले उन बात करना चाहता था हम तो आपको समझ में किसी भी आगे जाना वास्तव में यहीं इस बात है कि dereferencing के लिए सिर्फ वाक्यात्मक चीनी सूचक और उसके बाद के लिए जा रहा उस संरचना के एन हिस्सा. इस स्लाइड के बारे में कोई सवाल? ठीक है. तो हम एक जोड़े के माध्यम से जाने के लिए जा रहे हैं आप पर क्या कर सकते हैं कि आपरेशन के लिंक सूचियों. एक लिंक सूची, याद है, एक श्रृंखला की है एक दूसरे को इंगित कि नोड्स. और हम आम तौर पर एक सूचक के साथ शुरू कहा जाता है सिर, आम तौर पर, कि करने के लिए अंक सूची में पहली बात. , यहाँ पहली लाइन पर तो हम पहले हमारे मूल एल है. तो बात यह है कि आप के बारे में सोच सकते हैं - इस यहीं पाठ के रूप में के बारे में सोच सकते हैं हम संग्रहीत किया है सिर्फ सूचक कहीं उस अंक पहला तत्व है. और इस लिंक की गई सूची में हम चार नोड्स है. प्रत्येक नोड एक बड़ी बॉक्स है. बड़ा अंदर बड़े बॉक्स बॉक्स पूर्णांक हिस्सा है. और फिर हम एक सूचक हिस्सा है. इन बक्सों के लिए तैयार नहीं कर रहे हैं पैमाने कितना बड़ा है क्योंकि बाइट्स में एक पूर्णांक? कितना बड़ा अब? चार. और एक सूचक कितना बड़ा है? चार. तो सच में, हम आकर्षित करने के लिए गए थे इस दोनों बक्से पैमाने पर करने के एक ही आकार होगा. इस मामले में, हम सम्मिलित करना चाहते हैं लिंक की गई सूची में कुछ. तो आप हम डालने रहे हैं यहाँ नीचे देख सकते हैं पाँच हम के माध्यम से पार लिंक सूची, लगता है, जहां पांच चला जाता है, और फिर इसे डालें. चलो कि नीचे तोड़ने के लिए और चलते हैं एक छोटा सा और धीरे धीरे. मैं बोर्ड से बात करने के लिए जा रहा हूँ. इसलिए हम अपने नोड पाँच कि हम mallocs में बना लिया है. क्यों हर कोई हँस रहा है? बस मजाक कर. ठीक है. तो हम पांच malloced किया है. हम इस नोड बना लिया है कहीं और. हम जाने के लिए तैयार है. हम के सामने शुरू दो के साथ हमारी सूची. और हम सम्मिलित करना चाहते हैं एक हल फैशन में. इसलिए हम दो देखना है और हम करना चाहते हैं जब हम देखते हैं पांच में, हम क्या करें हम से कम कुछ और? क्या? हम इस मामले में पांच सम्मिलित करना चाहते हैं लिंक सूची, यह क्रमबद्ध रखते. हम दो नंबर देख. तो हम क्या करें? मार्कस? दर्शक: सूचक बुलाओ अगले नोड के लिए. जेसन Hirschhorn: और क्यों हम अगले एक करने के लिए जाना? दर्शक: यह है क्योंकि सूची में अगले नोड. और हम केवल कि अन्य स्थान पता है. जेसन Hirschhorn: और पाँच अधिक है दो से, विशेष रूप से. हम छांटी गई रखना चाहते हैं. तो पाँच दो से अधिक है. इसलिए हम अगले एक पर चलते हैं. और अब हम चार तक पहुँचने. हम चार तक पहुँच जाने और क्या होता है? पांच में चार से अधिक है. तो हम जाते रहते हैं. और अब हम छह पर रहे. और हम छह में क्या देखते हैं? हाँ, कार्लोस? दर्शक: छह से पांच से अधिक है. जेसन Hirschhorn: छह है पांच से अधिक. हम चाहते हैं इतना है कि जहां पांच डालने के लिए. हालांकि, यह ध्यान रखें कि अगर हम यहां केवल एक सूचक है - इस है कि हमारे अतिरिक्त सूचक है सूची के माध्यम से प्रवाह. और हम छह की ओर इशारा कर रहे हैं. हम क्या का ट्रैक खो दिया है छह से पहले आता है. तो हम में कुछ डालने के लिए चाहते हैं यह ध्यान में रखते हुए इस सूची, क्रमबद्ध हम शायद कितने संकेत की जरूरत है? दर्शक: दो. जेसन Hirschorn: दो. एक वर्तमान का ट्रैक रखने के लिए एक और एक ट्रैक के रखने के लिए पिछले एक. यह केवल एक अकेले लिंक सूची है. यह केवल एक ही दिशा में चला जाता है. हम एक दोगुना लिंक की गई सूची था, जहां सब कुछ बात की ओर इशारा किया गया था यह और यह पहले बात, फिर बाद हम ऐसा करने की जरूरत नहीं होगी. लेकिन इस मामले में हम हार नहीं करना चाहती मामले में हमारे सामने आया है का ट्रैक हम पाँच कहीं डालने की जरूरत बीच में. हम नौ डालने थे. क्या होगा जब हम आठ मिल गया? दर्शक: आप के लिए होगा कि अशक्त बात मिलता है. इसके बजाय अशक्त बिंदु होने की तुम होगा एक तत्व जोड़ सकते हैं और तब के लिए है यह नौ को इंगित करें. जेसन Hirschorn: बिल्कुल. तो हम आठ मिलता है. हम सूची के अंत तक पहुँचते हैं, क्योंकि इस अशक्त करने के लिए इशारा कर रहा है. और अब, बजाय होने की यह करने के लिए बात अशक्त हम यह हमारे नए नोड के लिए बिंदु है. और हम में सूचक सेट अशक्त करने के लिए हमारे नए नोड. किसी को भी किसी भी सवाल है डालने के बारे में? क्या बारे में मुझे परवाह नहीं है अगर क्रमबद्ध सूची रखने? दर्शक: पर यह छड़ी शुरुआत या अंत. जेसन Hirschorn: पर यह छड़ी शुरुआत या अंत. जो एक हमें क्या करना चाहिए? बॉबी? क्यों अंत? दर्शक: क्योंकि शुरुआत पहले से ही भरा हुआ है. जेसन Hirschorn: ठीक है. शुरुआत पहले से ही भरा हुआ है. कौन बॉबी के खिलाफ बहस करना चाहता है. मार्कस. दर्शक: वैसे आप शायद करना चाहते हैं शुरुआत में यह छड़ी क्योंकि आप पर डाल अन्यथा अगर आप के लिए होगा अंत पूरी सूची पार. जेसन Hirschorn: बिल्कुल. हम देखने का समय के बारे में सोच रहे हैं तो अगर, अंत में डालने के देखने का समय n होगा, इस का आकार. डालने की बड़ी हे देखने का समय क्या है शुरुआत में? लगातार समय. तो अगर आप रखने के बारे में परवाह नहीं है कुछ, सिर्फ बेहतर क्रमबद्ध इस सूची की शुरुआत में सम्मिलित करें. और वह लगातार समय में किया जा सकता है. ठीक है. अगले आपरेशन लगता है, जो अन्य है - हम खोज के रूप में इस phrased किया है. लेकिन हम के माध्यम से देखने के लिए जा रहे हैं किसी वस्तु के लिए लिंक सूची. आप लोगों के लिए कोड को देखा है व्याख्यान में पहले खोज. लेकिन हम की तरह बस के साथ किया था डालें, या कम से कम डालने कुछ हल. आप के माध्यम से देखो, नोड द्वारा नोड जा रहा है, क्या आप कर रहे हैं कि नंबर मिल तक के लिए देख रहे हैं. आप पहुंच जाते हैं तो क्या होता है सूची के अंत? मैं नौ और मैं देख रहा हूँ सूची के अंत तक पहुँचते हैं. हम क्या करते हैं? दर्शक: झूठी वापसी? जेसन Hirschorn: झूठी वापसी. हम यह नहीं मिल रहा था. आप सूची के अंत तक पहुँचते हैं और यदि क्या आप कर रहे हैं नंबर नहीं मिला के लिए देख रहे हैं, यह वहाँ में नहीं है. के बारे में किसी भी सवाल का लगता है? इस एक हल सूची में था, तो क्या होता हमारी खोज के लिए अलग हो सकता है? हाँ. दर्शक: यह पहली मूल्य मिलेगा कि एक से अधिक है आप के लिए देख रहे हैं और फिर झूठी वापसी. जेसन Hirschorn: बिल्कुल. तो यह एक सॉर्ट की गई सूची है, तो हम करने के लिए मिलता है क्या अधिक से अधिक कुछ है कि हम देख रहे हैं, हम की जरूरत नहीं है सूची के अंत में जाते रहते हैं. हम उस बिंदु पर झूठे लौट सकते हैं हम इसे खोजने के लिए नहीं जा रहे हैं क्योंकि. अब सवाल है, हम के बारे में बात की है है क्रमबद्ध लिंक सूचियों रखने, unsorted रखते हुए उन्हें. यही कारण है कि आप कर रहे हैं कुछ होने जा रहा है शायद बारे में सोचने के लिए किया जा रहा आप अगर कोडन समस्या पाँच सेट करते समय अलग से एक हैश तालिका का चयन श्रृंखलन दृष्टिकोण, जो हम बाद में बात करेंगे. लेकिन यह सूची रखने के लिए इसके लायक है फिर हल और शायद करने में सक्षम हो तेज खोजों? या फिर यह जल्दी से सम्मिलित करने के लिए बेहतर है फिर लगातार क्रम में कुछ है, लेकिन खोज अब है? यह सही वहाँ एक tradeoff है कि आप उस अधिक उचित है क्या तय करने के लिए मिलता है अपने विशिष्ट समस्या के लिए. और जरूरी वहाँ एक नहीं है बिल्कुल सही जवाब. लेकिन यह निश्चित रूप से आप एक निर्णय है बनाने के लिए, और शायद अच्छा बचाव करने के लिए उस में, कहते हैं, एक टिप्पणी या दो क्यों आप एक दूसरे के ऊपर चुना है. अंत में, हटाने. हम हटाने को देखा है. यह खोज करने के लिए इसी तरह की है. हम तत्व के लिए देखो. हम छह से हटाने के लिए कोशिश कर रहे हैं. तो हम यहीं छह पाते हैं. हमें यकीन है कि हम करने के लिए है कि बात जो कुछ भी करने के लिए इशारा कर रहा है कि है छह - हम कदम में देखने के रूप में यहाँ नीचे दो - को छह जरूरतों की ओर इशारा कर रहा है जो कुछ भी अब छह को छोड़ और को बदला जा जो भी छह की ओर इशारा कर रहा है. हम कभी आराम के अनाथ नहीं करना चाहती उस सेट को भूल कर हमारी सूची पिछले सूचक. और फिर कभी कभी, निर्भर करता है कार्यक्रम पर, वे तो बस हूँ पूरी तरह से इस नोड हटा दें. कभी कभी तुम वापस जाने के लिए चाहता हूँ इस नोड में है कि मूल्य. तो यह है कि निर्माण को हटाने कैसे है. पर कोई प्रश्न मिटाना चाहते हैं? दर्शक: तो आप को हटाने के लिए जा रहे हैं यह, तुम सिर्फ मुफ्त का प्रयोग करेंगे क्योंकि संभवतः यह malloced था? जेसन Hirschorn: तुम मुक्त करने के लिए चाहते हैं बिल्कुल सही है और आप कुछ है कि यह malloced. हम यह मान चाहता था. हम वापस हो सकता है छह और उसके बाद मुक्त उस पर इस नोड और कॉल मुफ्त. या हम शायद पहला नि: शुल्क फोन था और फिर छह वापसी. ठीक है. तो चलो कोडन अभ्यास पर चलते हैं. हम तीन कार्यों कोड जा रहे हैं. पहले एक insert_node कहा जाता है. तो तुम मैं आपको ईमेल कर दी है कि कोड है, और आप बाद में यह देख रहे हैं आप linked.c में कोड का उपयोग कर सकते हैं CS50 वेबसाइट पर. लेकिन linked.c में, कुछ नहीं है पहले से ही है कि कंकाल कोड आप के लिए लिखा गया. और फिर एक जोड़ी कार्य कर रहा है आप लिखने की जरूरत है. सबसे पहले हम करने जा रहे हैं insert_node लिखें. और क्या insert_node करता है एक पूर्णांक सम्मिलित करता है. और आप पूर्णांक दे रहे हैं एक लिंक की गई सूची में. और विशेष रूप से, आप की जरूरत क्रमबद्ध सूची रखने के लिए छोटी से सबसे बड़ा करने के लिए. इसके अलावा, आप नहीं करना चाहते किसी भी डुप्लिकेट डालें. अंत में, आप insert_node देख सकते हैं एक bool देता है. तो आप उपयोगकर्ता बताने के लिए चाहिए रहे हैं सम्मिलित था या नहीं, सही है या गलत लौटने से सफल. इस कार्यक्रम के अंत में - और इस स्तर के लिए आप की जरूरत नहीं कुछ भी मुक्त कराने के बारे में चिंता करने की. तो तुम सब कर रहे हैं एक पूर्णांक ले रही है और एक सूची में डालने. यही कारण है कि मैं अब क्या करने के लिए कह रहा हूँ. फिर, linked.c में, जो आप सभी कंकाल कोड है. और आप नीचे की ओर देखना चाहिए नमूना समारोह घोषणा. हालांकि, यह कोडिंग में जाने से पहले सी में, मैं अत्यधिक जाने के लिए प्रोत्साहित करते हैं कदम के माध्यम से हम किया गया है प्रत्येक सप्ताह अभ्यास. हम पहले से ही के माध्यम से चला गया है इस की एक तस्वीर. तो अगर आप कुछ समझ होनी चाहिए यह कैसे काम करता है. लेकिन मैं लिखने के लिए प्रोत्साहित करेगा अंदर गोताखोरी से पहले कुछ pseudocode और हम पर जाने के लिए जा रहे हैं एक समूह के रूप में pseudocode. और फिर तुम लिखा है एक बार अपने pseudocode, और हम लिखा है एक बार हमारे एक समूह के रूप में pseudocode, आप कर सकते हैं सी. में यह कोडिंग में जाने एक को सिर, insert_node समारोह के रूप में शायद के trickiest है तीन हम लिखने जा रहे हैं क्योंकि मैं करने के लिए कुछ अतिरिक्त बाधाओं गयी अपने प्रोग्रामिंग, विशेष रूप से है कि आप किसी भी सम्मिलित करने के लिए नहीं जा रहे हैं डुप्लिकेट और उस सूची छांटी गई रहना चाहिए. तो यह एक गैर तुच्छ कार्यक्रम है आप कोड की जरूरत है. और तुम क्यों 5-7 से नहीं लेते मिनट बस पर काम कर पाने के लिए pseudocode और कोड. और फिर हम शुरू कर देंगे एक समूह के रूप में जा रहा है. फिर, आप सिर्फ कोई प्रश्न हैं अपना हाथ बढ़ा और मैं आसपास आता हूँ. . हम भी आम तौर पर इन करते हैं - या मैं स्पष्ट रूप से आप मत कहो लोगों के साथ काम कर सकते हैं. लेकिन जाहिर है, मैं अत्यधिक प्रोत्साहित करते हैं, यदि आप प्रश्न हैं, पूछने के लिए आप के बगल में बैठे पड़ोसी या यहां तक ​​कि किसी के साथ काम फिर आप करना चाहते हैं. यह एक व्यक्ति होना जरूरी नहीं है मूक गतिविधि. चलो कुछ लिखने के साथ शुरू करते हैं बोर्ड पर pseudocode. मुझे कौन की पहली पंक्ति दे सकते हैं इस कार्यक्रम के लिए pseudocode? इस समारोह के लिए, बल्कि - insert_node. Alden? दर्शक: तो मैंने पहली बात थी नोड और मैं करने के लिए एक नया सूचक बना यह उसी की ओर इशारा करते initialized सूची पर इशारा कर रहा है कि बात. जेसन Hirschorn: ठीक है. तो आप एक नया सूचक बना रहे हैं सूची पर, नहीं नोड के लिए. दर्शकों: ठीक है. हाँ. जेसन Hirschorn: ठीक है. और फिर हम क्या करना चाहते हैं? उसके बाद क्या है? क्या नोड के बारे में? हम एक नोड नहीं है. हम सिर्फ एक मूल्य है. हम एक नोड सम्मिलित करना चाहते हैं, तो हमें क्या हम भी कर सकते हैं पहले पहले करने की जरूरत यह डालने के बारे में सोचते हैं? दर्शक: ओह, माफ करना. हम एक नोड के लिए अंतरिक्ष malloc की जरूरत है. जेसन Hirschorn: उत्कृष्ट. चलो - ठीक है. कि उच्च तक नहीं पहुँच सकते. ठीक है. हम नीचे जा रहा है, और फिर रहे हैं हम दो स्तंभों का उपयोग कर रहे हैं. मुझे लगता है कि नहीं जा सकते हैं - ठीक है. एक नए नोड बनाएँ. आप सूची में एक और सूचक बना सकते हैं यह मौजूद है या आप बस सूची का उपयोग कर सकते हैं. तुम सच में ऐसा करने की जरूरत नहीं है. तो हम एक नया नोड बनाएँ. ग्रेट. यही कारण है कि हम पहले क्या करते हैं. आगे क्या है? दर्शक: रुको. हम अब एक नया नोड बनाने के लिए या होना चाहिए हमें यकीन है कि बनाने के लिए इंतजार करना चाहिए नोड का कोई डुप्लिकेट है सूची पर इससे पहले कि हम इसे बनाने? जेसन Hirschorn: अच्छा सवाल है. बाद में क्योंकि के लिए कि पकड़ दो. हम पैदा हो जाएगा समय के बहुमत एक नए नोड. इसलिए हम यहां उस रखेंगे. लेकिन यह एक अच्छा सवाल है. हम इसे बनाने के लिए और हम पाते हैं डुप्लिकेट, क्या करना चाहिए हम लौटने से पहले करते हैं? दर्शक: यह मुक्त. जेसन Hirschorn: हाँ. शायद यह मुक्त. ठीक है. हम के बाद हम क्या करते हैं एक नए नोड बनाने? एनी? दर्शक: हम डाल नोड में नंबर? जेसन Hirschorn: बिल्कुल. हम नंबर डाल - हम अंतरिक्ष malloc. मुझे लगता है कि छोड़ने के लिए जा रहा हूँ सभी एक पंक्ति के रूप में. लेकिन तुम सही हो. हम तो अंतरिक्ष malloc, और हम अंदर नंबर डाल हम भी सूचक सेट कर सकते हैं अशक्त करने के लिए इसे का हिस्सा. यह बिल्कुल सही है. और फिर उसके बाद क्या बारे में? हम बोर्ड पर इस तस्वीर को आकर्षित किया. तो हम क्या करें? दर्शक: हम सूची के माध्यम से जाना. जेसन Hirschorn: सूची के माध्यम से जाओ. ठीक है. और हम प्रत्येक नोड के लिए क्या जाँच करते हैं. कर्ट, क्या हम जाँच करते हैं प्रत्येक नोड के लिए? दर्शक: देखें एन मूल्य का है कि क्या कि नोड एन मूल्य से अधिक है हमारे नोड की. जेसन Hirschorn: ठीक है. मैं क्या करने जा रहा हूँ - ठीक है, हाँ. तो यह पता है - मैं मूल्य अधिक होता है, तो कहने जा रहा हूँ इस नोड से, तो हम क्या करें? दर्शक: ठीक है, तो हम सम्मिलित सही है कि इससे पहले कि बात. जेसन Hirschorn: ठीक है. तो यह इस से अधिक है, तो तो हम सम्मिलित करना चाहते हैं. लेकिन हम ठीक से पहले यह सम्मिलित करना चाहते हैं हम भी होने की आवश्यकता होगी क्योंकि ट्रैक रखने, तो, पहले क्या था. तो इससे पहले डालें. तो हम शायद कुछ याद किया पहले पर. हम शायद रखने होने की जरूरत क्या हो रहा है का ट्रैक. लेकिन हम वहाँ वापस मिल जाएगा. तो क्या मान से कम है? कर्ट, हम तो क्या करते हो मूल्य से कम है? दर्शक: तो फिर तुम बस जा रहा रखने यह पिछले एक है जब तक. जेसन Hirschorn: मैं उस तरह. तो अगले नोड के पास जाओ. यह पिछले एक है - जब तक हम शायद उस के लिए जाँच कर रहे हैं एक शर्त के संदर्भ में. लेकिन हाँ, अगले नोड. और वह भी कम हो रही है तो हम यहाँ पर कदम होगा. लेकिन अगर - हर कोई देख सकता है? हम बराबर हैं, तो हम क्या करें? मूल्य हम सम्मिलित करने के लिए कोशिश कर रहे हैं इस नोड के मूल्य के बराबर है? हाँ? दर्शक: [सुनाई]. जेसन Hirschorn: हाँ. यह देखते - मार्कस सही है. हम शायद कर सकता था कुछ अलग. लेकिन यहाँ, हम इसे बनाया है कि दी हम नि: शुल्क है और फिर वापस आ जाना चाहिए. ओह लड़के. कि बेहतर है? यह कैसे है? ठीक है. हम क्या करते हैं तो नि: शुल्क और [सुनाई], वापसी? ठीक है. हम कुछ भी याद आ रहे हैं? तो हम कहाँ नज़र रख रहे हैं पिछले नोड की? दर्शक: मैं इसे जाना होगा लगता है के बाद एक नया नोड बनाएँ. जेसन Hirschorn: ठीक है. तो शुरुआत में हम शायद हूँ - हाँ, हम एक नया करने के लिए एक सूचक बना सकते हैं पिछले एक नोड सूचक की तरह नोड, और एक मौजूदा नोड सूचक. तो चलो यहाँ डालने दे. बनाएँ वर्तमान और पिछले नोड्स के संकेत दिए. लेकिन जब हम उन संकेत को समायोजित? हम उस कोड में कहां करते हैं? जेफ? दर्शक: - मान की स्थिति? जेसन Hirschorn: कौन सा विशेष रूप से एक? दर्शक: मैं सिर्फ उलझन में हूँ. मूल्य, इस नोड से अधिक है कि आप जाना चाहते हैं कि इसका मतलब यह नहीं अगले नोड के लिए? जेसन Hirschhorn: तो हमारे मूल्य है अगर इस नोड के मूल्य से अधिक. दर्शक: हाँ, तो आप के लिए चाहता हूँ ठीक है, आगे की पंक्ति नीचे जाना? जेसन Hirschhorn: ठीक है. इसलिए हम इसे यहाँ डालने नहीं है. मूल्य तो, इस नोड से कम है हम अगले नोड के लिए जाने - फिर या हम पहले डालें. दर्शक: यह जो है, रुको नोड और जो मूल्य है? जेसन Hirschhorn: अच्छा सवाल है. मूल्य इस समारोह परिभाषा के अनुसार हम दी रहे हैं क्या है. तो मान हम दी रहे हैं संख्या है. तो मान को इस से कम है तो नोड, हम सम्मिलित करने के लिए समय की जरूरत है. मूल्य, इस नोड से अधिक है हम अगले नोड के पास जाओ. और वापस मूल प्रश्न, हालांकि, जहां - दर्शक: मूल्य अधिक है, तो इस नोड से. जेसन Hirschhorn: और इसलिए हम यहाँ क्या करते हो? मीठा. यह सही है. मैं सिर्फ लिखने के लिए जा रहा हूँ अद्यतन संकेत दिए. लेकिन हाँ, वर्तमान एक साथ यह आप के लिए अद्यतन करेगा अगले एक करने के लिए बिंदु. और कुछ हम याद कर रहे हैं? इसलिए मैं इस प्रकार के लिए जा रहा हूँ जीएडिट में कोड. मैं इस करते हैं, तो आप एक हो सकता है कोडन पर काम करने के लिए कुछ अधिक मिनट इस सी में तो मैं इनपुट pseudocode है. हम शुरू से पहले एक जल्दी ध्यान दें. हम सक्षम करने के लिए पूरी तरह से नहीं हो सकता सभी में यह खत्म इन कार्यों में से तीन. उन्हें सही समाधान नहीं है मैं तुम लोगों को बाहर ईमेल करेंगे कि अनुभाग के बाद, और यह होगा CS50.net पर पोस्ट कर दिया. तो मैं करने के लिए प्रोत्साहित नहीं करते वर्गों में लग जाना. मैं इन पर प्रयास करने के लिए प्रोत्साहित करते हैं आपके ही है, और फिर अभ्यास का उपयोग अपने जवाब की जांच के लिए समस्याओं. ये सभी डिजाइन किया गया है को बारीकी से से संबंधित हैं और का पालन करना क्या आप समस्या सेट पर क्या करना है. इसलिए मैं इस अभ्यास करने के लिए प्रोत्साहित करते हैं अपने दम पर और उसके बाद करने के लिए कोड का उपयोग करें अपने जवाब की जाँच करें. मैं हैश करने के लिए आगे बढ़ना चाहता है क्योंकि अनुभाग में कुछ बिंदु पर तालिकाओं. इसलिए हम यह सब के माध्यम से नहीं मिल सकता है. लेकिन हम अब हम कर सकते हैं के रूप में ज्यादा कर देंगे. ठीक है. हमें शुरू करते हैं. असम, कैसे हम एक नए नोड बना सकता हूँ? दर्शक: आप * struct है. जेसन Hirschhorn: तो हम यहाँ कि ऊपर है. ओह, माफ करना. आप * संरचना कह रहे थे. दर्शक: और फिर [? तरह?] नोड या सी नोड. जेसन Hirschhorn: ठीक है. मैं यह new_node कॉल करने के लिए जा रहा हूँ इसलिए हम लगातार रह सकते हैं. दर्शक: और तुम उस सेट करना चाहते हैं , पहला नोड सिर करने के लिए. जेसन Hirschhorn: ठीक है. तो अब इस ओर इशारा करते हैं - तो यह अभी तक एक नया नोड नहीं बनाया गया है. यह सिर्फ करने के लिए इशारा कर रहा है सूची में पहला नोड. कैसे मैं एक नया नोड बना सकता हूँ? मैं एक नया नोड बनाने के लिए स्थान की आवश्यकता है. Malloc. और कितना बड़ा? दर्शक: संरचना के आकार. जेसन Hirschhorn: संरचना के आकार. और संरचना क्या कहा जाता है? दर्शक: नोड? जेसन Hirschhorn: नोड. तो malloc (sizeof (नोड)); हमें अंतरिक्ष देता है. और इस लाइन है - एक बात इस लाइन पर गलत है. एक संरचना पर कोई सूचक new_node है? यह एक सामान्य नाम है. यह क्या है - नोड, बिल्कुल. यह * एक नोड है. और हम सही होने के बाद क्या करें हम आसन कुछ, malloc? हम पहली बात क्या है? क्या यह काम नहीं करता है? दर्शक: ओह, जाँच अगर यह नोड के लिए अंक? जेसन Hirschhorn: बिल्कुल. तो आप new_node अगर बराबर होती है अशक्त, हम क्या करें? यह एक bool, इस फ़ंक्शन देता है. बिल्कुल सही. अच्छा लग रहा है. वहाँ जोड़ने के लिए कुछ है? हम अंत में बातें जोड़ देंगे. लेकिन यह है कि अब तक अच्छा लग रहा है. वर्तमान और पिछले संकेत बनाएँ. माइकल, मैं यह कैसे करते हो? दर्शक: आपके पास होता एक नोड क्या करना *. आप एक नहीं बनाने के लिए होगा new_node के लिए, लेकिन के लिए नोड्स हम पहले से ही है. जेसन Hirschhorn: ठीक है. इसलिए वर्तमान नोड हम पर हैं. मुझे लगता है कि curr फोन करता हूँ. ठीक है. हम रखना चाहते तय कर लिया है हम पता करने की जरूरत दो क्योंकि क्या यह पहले है. वे क्या करने के लिए प्रारंभ करूँ? दर्शक: हमारी सूची में उनके मूल्य. जेसन Hirschhorn: तो क्या है हमारी सूची में पहले बात है? या हमें कैसे पता है, जहां हमारी सूची की शुरुआत है? दर्शक: यह पारित नहीं किया है समारोह में? जेसन Hirschhorn: ठीक है. यह यहीं में पारित किया गया था. यह समारोह में पारित कर दिया है, तो अगर, सूची के शुरू, क्या हम चाहिए के बराबर मौजूदा सेट? दर्शक: सूची. जेसन Hirschhorn: सूची. यह बिल्कुल सही है. अब यह पता की है हमारी सूची की शुरुआत. और क्या पिछले के बारे में? दर्शक: सूची शून्य से एक? जेसन Hirschhorn: वहाँ यह पहले कुछ भी नहीं है. इसलिए हम कुछ नहीं दर्शाता क्या कर सकते हैं? दर्शक: अशक्त. जेसन Hirschhorn: हाँ. यह एक अच्छा विचार की तरह लगता है. बिल्कुल सही. धन्यवाद. सूची के माध्यम से जाओ. Constantine, कब तक हम जा रहे हैं सूची के माध्यम से जाने के लिए? दर्शक: हम अशक्त पहुँचने तक. जेसन Hirschhorn: ठीक है. तो, अगर पाश के लिए, जबकि. हम क्या कर रहे हो? दर्शक: शायद एक पाश के लिए? जेसन Hirschhorn: चलो एक पाश के लिए करते हैं. ठीक है. दर्शक: और हम के लिए कहते हैं - वर्तमान सूचक तक अशक्त करने के बराबर नहीं है. जेसन Hirschhorn: तो हम जानते हैं कि अगर हालत, कैसे हम एक पाश लिख सकते हैं शर्त यह है कि बंद आधारित है. हम एक पाश का किस तरह इस्तेमाल करना चाहिए? दर्शक: एक ओर जहां. जेसन Hirschhorn: हाँ. उस आधार पर और अधिक समझ में आता है तुम क्या कहा के बंद. हम सिर्फ हम में जाना चाहते हैं तो यह होगा बस उस बात पता है, यह करना होगा थोड़ी देर के पाश करते भावना. वर्तमान बराबर नहीं अशक्त करता है, जबकि मान को इस नोड की तुलना में कम है. अक्षर, मुझे इस लाइन दे. दर्शक: यदि वर्तमान> एन एन मूल्य से कम है. या कि रिवर्स. उस कोष्ठक में बदलें. जेसन Hirschhorn: क्षमा करें. दर्शक: ब्रैकेट बदलें. जेसन Hirschhorn: तो यह है कि अगर मूल्य से अधिक. उस के साथ भ्रमित करने वाला है क्योंकि ऊपर टिप्पणी है, मैं क्या करने जा रहा हूँ. लेकिन हाँ. हमारे मूल्य इस से भी कम है नोड, हम क्या करें? ओह. मैं इसे यहीं है. पहले डालें. ठीक है. हम यह कैसे करते हो? दर्शक: यह मुझे अभी भी है? जेसन Hirschhorn: हाँ. दर्शक: आप - new_node-> अगले. जेसन Hirschhorn: तो क्या है कि बराबर करने के लिए जा रहे हैं? दर्शक: यह बराबर चालू करने जा रहा है. जेसन Hirschhorn: बिल्कुल. और तो अन्य - हम अद्यतन करने के लिए और क्या चाहिए? दर्शक: अतीत बातिल के बराबर होती है की जाँच करें. जेसन Hirschhorn: पिछला हैं - यदि हां, तो पिछला बातिल के बराबर होती है. दर्शकों: कि यह हो रहा है इसका मतलब सिर बनने के लिए. जेसन Hirschhorn: इसका मतलब है यह सिर हो गया है. तो फिर हम क्या करें? दर्शक: हम सिर करना new_node के बराबर होती है. जेसन Hirschhorn: प्रमुख new_node के बराबर होती है. और क्यों की सूची नहीं है, यहाँ सिर? दर्शक: सिर एक वैश्विक है क्योंकि शुरू जगह है जो चर,. जेसन Hirschhorn: मीठा. ठीक है. और - दर्शक: तो फिर तुम बाकी है prev-> अगले new_node के बराबर होती है. और फिर तुम सच वापसी. जेसन Hirschhorn: कहां करना हम new_node अंत सेट? दर्शक: मैं करूंगा - मैं शुरू में है कि निर्धारित किया है. जेसन Hirschhorn: तो क्या रेखा? दर्शक: के बाद अगर बयान यह ज्ञात है कि अगर जाँच. जेसन Hirschhorn: ठीक है यहाँ? दर्शक: मैं कर सकता हूँ new_node-> एन मूल्य के बराबर होती है. जेसन Hirschhorn: ठीक लगता है. शायद यह समझ में आता है - हम नहीं हम पर क्या कर रहे हैं सूची में जानने की जरूरत हम केवल काम कर रहे हैं, क्योंकि एक सूची के साथ. तो के लिए एक बेहतर समारोह घोषणा यह सिर्फ इस से छुटकारा पाने के लिए है पूरी तरह से और बस सम्मिलित सिर में एक मूल्य. हम भी जानने की जरूरत नहीं है हम अंदर क्या कर रहे हैं सूची लेकिन मैं अब के लिए इसे रखेंगे तब अद्यतन करने पर इसे बदल स्लाइड और कोड. तो यह है कि अब के लिए अच्छा लग रहा है. यदि मूल्य - जो इस लाइन कर सकते हैं? तो - हम नूह, यहाँ क्या करते हैं. दर्शक: मूल्य अधिक है, तो n curr> से - जेसन Hirschhorn: कैसे करूँ हम अगले नोड के लिए जाना? दर्शक: कुर-> एन है new_node के बराबर. जेसन Hirschhorn: तो पता है संरचना का क्या हिस्सा है? पूर्णांक. और new_node एक नोड के लिए एक संकेत है. इसलिए हम curr का क्या हिस्सा अद्यतन करना चाहिए? नहीं पता, तो दूसरे भाग क्या है? नूह, अन्य हिस्सा है. दर्शक: ओह, अगले. जेसन Hirschhorn: अगला, बिल्कुल. बिल्कुल सही. अगला सही है. और हम और क्या चाहिए नूह को अद्यतन करने के लिए? दर्शक: संकेत दिए. जेसन Hirschhorn: तो हम वर्तमान अद्यतन. दर्शक: पिछला-> अगले. जेसन Hirschhorn: हाँ. ठीक है, हम रोक देंगे. यहाँ कौन हमारी मदद कर सकते हैं? मनु, हमें क्या करना चाहिए? दर्शक: आप सेट करने के लिए मिल गया है यह curr-> अगले करने के लिए बराबर. लेकिन पिछले लाइन से पहले करते हैं. जेसन Hirschhorn: ठीक है. और कुछ? अक्षर. दर्शक: मैं लगता है कि तुम नहीं करते अगले curr> बदलने का मतलब है. मैं आप curr बराबरी करना चाहिए रहे हैं लगता है curr-> अगले नोड के लिए जाने के लिए अगले. जेसन Hirschhorn: तो क्षमा करें, कहाँ? क्या लाइन पर? इस लाइन? दर्शक: हाँ. बनाओ curr अगले curr-> के बराबर होती है. जेसन Hirschhorn: तो यह सही है वर्तमान है क्योंकि एक एक नोड के लिए सूचक. और हम इसे अगले करने के लिए बात करना चाहते हैं वर्तमान में हो रही है की नोड की ओर इशारा किया. कुर ही एक अगले है. लेकिन हम थे curr.next अद्यतन करने के लिए, हम वास्तविक नोट अपडेट किया जाएगा खुद नहीं, जहां इस सूचक इशारा कर रहा था. क्या इस लाइन के बारे में है, यद्यपि. AVI? दर्शक: पिछला-> अगले curr के बराबर होती है. जेसन Hirschhorn: तो फिर, अगर पिछले एक है एक नोड के लिए सूचक, पिछला-> अगले है नोड में वास्तविक सूचक. तो यह अद्यतन नहीं किया जाएगा एक curr करने के लिए एक नोड में सूचक. हम अद्यतन करने के लिए नहीं करना चाहती एक नोड में एक सूचक. हम पिछले अद्यतन करना चाहते हैं. तो हम कैसे करते हो? दर्शक: यह बस पीछे की जाएगी. जेसन Hirschhorn: ठीक है. पिछला एक नोड के लिए एक संकेत है. अब हम एक करने के लिए इसे बदल रहे हैं एक नोड के लिए नया सूचक. ठीक हमें नीचे चलते हैं. अंत में, यह पिछले हालत. जेफ, हम यहाँ क्या करते हो? दर्शक: यदि मान curr-> एन के बराबर. जेसन Hirschhorn: क्षमा करें. हे भगवान. क्या? मूल्य == curr-> एन. हम क्या करते हैं? दर्शक: आप हमारे new_node मुक्त होगी, और फिर आप झूठी वापसी चाहते हैं. जेसन Hirschhorn: यह है क्या हम अब तक लिखा है. किसी को कुछ भी है हम बनाने से पहले जोड़ने के लिए? ठीक है. चलो यह कोशिश करते हैं. नियंत्रण अंत तक पहुंच सकता है एक गैर शून्य समारोह का. AVI, क्या चल रहा है? दर्शक: तुम बदले डाल करने वाले हैं जबकि पाश के बाहर सच? जेसन Hirschhorn: मुझे नहीं पता. तुम मुझे करने के लिए करना चाहते हैं? दर्शक: कोई बात नहीं. नहीं. जेसन Hirschhorn: अक्षर? दर्शक: मैं तुम से मतलब है अंत में वापसी झूठी डाल जबकि पाश की. जेसन Hirschhorn: तो जहां आप यह जाना चाहते हो? दर्शक: जबकि पाश बाहर की तरह. तो क्या इसका मतलब है, जबकि पाश से बाहर निकलें, तो आप अंत तक पहुँच और है कि कुछ भी नहीं हुआ है. जेसन Hirschhorn: ठीक है. इसलिए हम यहां क्या करते हो? दर्शक: तुम वापसी झूठी वहाँ के रूप में अच्छी तरह से. जेसन Hirschhorn: ओह, हम दोनों स्थानों में यह क्या है? दर्शक: हाँ. जेसन Hirschhorn: ठीक है. हमें जाना चाहिए? हे भगवान. मैं माफी चाहता हूँ. मैं स्क्रीन के लिए माफी माँगता हूँ. यह एक तरह से हम पर गुस्सा आ रहा है. तो एक विकल्प चुनें. शून्य, कोड के अनुसार, कार्यक्रम इस्तीफा. एक कुछ सम्मिलित करता है. तीन सम्मिलित करते हैं. सम्मिलित सफल नहीं था. मैं बाहर मुद्रित करने के लिए जा रहा हूँ. मैं कुछ भी नहीं है. ठीक है. हो सकता है कि सिर्फ एक अस्थायी था. एक डालें. सफल नहीं. ठीक है. वास्तव में जल्दी से GDB के माध्यम से चलाते हैं क्या हो रहा है की जाँच करने के लिए. के GDB याद रखें. / नाम अपने कार्यक्रम GDB में हमें हो जाता है. एक बहुत संभाल करने के लिए है? चमकती? शायद. अपनी आँखें बंद करो और कुछ गहरी ले तुम थक जाओ अगर श्वास का यह देख. मैं GDB में हूँ. GDB में पहली बात मैं क्या है? हम यह पता लगाने के लिए मिल गया है क्या यहाँ पर जा रहा है. चलो देखते हैं. हम चित्रा के लिए छह मिनट है पर क्या हो रहा है. मुख्य तोड़ो. और फिर मैं क्या करूँ? कार्लोस? भागो. ठीक है. के एक विकल्प का चयन करते हैं. और एन क्या करता है? अगला. हाँ. दर्शक: आप का उल्लेख नहीं किया है - आप सिर, यह था कि यह नहीं कहा शुरुआत में अशक्त करने के लिए प्रारंभ. लेकिन मुझे लगता है कि ठीक कहा था कि सोचा था. जेसन Hirschhorn: चलो चलें - चलो देखते हैं GDB में, और फिर हम वापस जाना होगा. आप पहले से ही है लेकिन ऐसा लगता है क्या हो रहा है के बारे में कुछ विचार. इसलिए हम कुछ सम्मिलित करना चाहते हैं. ठीक है. हम सम्मिलित है. एक पूर्णांक दर्ज करें. हम तीन डालने देंगे. और फिर मैं इस लाइन पर हूँ. कैसे मैं डिबगिंग शुरू जाते हो सम्मिलित समारोह में जाना जाता है? हे भगवान. यह एक बहुत है. कि एक बहुत गुस्सा आ रहा है? दर्शक: ओह, यह निधन हो गया. जेसन Hirschhorn: मैं बस उसे बाहर खींच लिया. ठीक है. दर्शक: शायद यह है तार के दूसरे छोर. जेसन Hirschhorn: वाह. इतना नीचे पंक्ति - तुमने क्या कहा? दर्शक: मैं ने कहा कि तकनीकी की विडंबना इस वर्ग में कठिनाइयों. जेसन Hirschhorn: मुझे मालूम है. अगर केवल मैं उस भाग पर नियंत्रण था. [सुनाई] यह बढ़िया लगता है. क्यों तुम लोगों के बारे में सोचना शुरू नहीं करते क्या हम गलत कर सकता था, और हम वापस 90 सेकंड में हो जाएगा. Avica, मैं कैसे जाने के लिए पूछने के लिए जा रहा हूँ यह डिबग करने के लिए अंदर insert_node. हम पिछले कहाँ दूर छोड़ दिया तो यह है. कैसे मैं insert_node अंदर जाते हो, Avica, क्या हो रहा है की जांच करने के लिए? क्या GDB आदेश? तोड़ अंदर मुझे नहीं ले जाएगा. Marquise पता है? दर्शक: क्या? जेसन Hirschhorn: क्या GDB आदेश मैं इस समारोह के अंदर जाने के लिए प्रयोग करते हैं? दर्शक: कदम? जेसन Hirschhorn: के माध्यम से कदम अंदर मुझे लगता है कि एस. ठीक है. New_node कुछ जगह mallocing. अपने सभी जाने की तरह लग रहा है. के new_node जांच करते हैं. यह कुछ स्मृति पता मिल गया. चेक करते हैं - कि सब सही है. यहाँ तो सब कुछ करने के लिए लगता है सही ढंग से काम कर रहे हो. दर्शक: क्या अंतर है पी और प्रदर्शन के बीच? जेसन Hirschhorn: पी प्रिंट के लिए खड़ा है. और तो तुम क्या पूछ रहे हैं कि और इस बीच अंतर है? इस मामले में, कुछ भी नहीं. लेकिन आम तौर पर कर रहे हैं कुछ मतभेद. और तुम GDB पुस्तिका में देखना चाहिए. लेकिन इस मामले में, कुछ भी नहीं. हम, हालांकि, प्रिंट का उपयोग करते हैं, क्योंकि हम ज्यादा से ज्यादा करने की ज़रूरत नहीं है एक एकल मान मुद्रित. ठीक है. तो हम अपने कोड की लाइन 80 पर हैं सूची के बराबर नोड * curr स्थापना. हमें curr बाहर प्रिंट करते हैं. यह सूची के बराबर होती है. मीठा. रुको. यह कुछ के बराबर होती है. यह सही नहीं लगता. हम वहाँ जाते हैं. यह GDB में, ठीक है, क्योंकि अगर यह तो आप उस पर कर रहे हैं रेखा है अभी तक क्रियान्वित नहीं किया गया है. तो आप वास्तव में टाइप करने की जरूरत लाइन पर अमल करने के लिए अगले इसके परिणाम देखने से पहले. तो यहाँ हम कर रहे हैं. हम सिर्फ इस लाइन से मार डाला, पिछले बातिल के बराबर होती है. तो फिर, जैसा कि हम पिछले प्रिंट हम कुछ भी अजीब नहीं देख सकेंगे. लेकिन हम वास्तव में उस पर अमल अगर रेखा, तब हम देखेंगे उस लाइन में काम किया है. इसलिए हम curr है. उन दोनों अच्छे हैं. है ना? अब हम यहीं इस लाइन पर हैं. Curr बराबर अशक्त नहीं करता है. खैर, curr बराबर क्या करता है? हम सिर्फ यह शून्य बराबरी देखा. हम इसे बाहर मुद्रित. मैं इसे फिर से बाहर मुद्रित करेंगे. तो है कि जबकि पाश निष्पादित करने के लिए जा रहे हैं? दर्शकों: नहीं जेसन Hirschhorn: तो मैं टाइप किया है कि जब रेखा, आप हम सभी तरह कूद देखना नीचे करने के लिए नीचे, झूठी वापसी. और फिर हम झूठी वापस जाने के लिए जा रहे हैं और हमारे कार्यक्रम को वापस जाने के लिए और हमने देखा की तरह अंत में, बाहर प्रिंट, सम्मिलित सफल नहीं था. तो, किसी को क्या पर कोई विचार है हम इसे ठीक करने के लिए क्या करने की जरूरत है? मैं मैं देख रहा हूँ जब तक इंतजार करने के लिए जा रहा हूँ हाथ की एक जोड़ी ऊपर जाना है. हम इस पर अमल नहीं किया. ध्यान रखें, यह पहली बार था हम क्या कर रहे थे बात. मैं कुछ कर नहीं जा रहा हूँ. मैं कुछ ऐसा करने जा रहा हूँ. एक जोड़े के दो मतलब है. मैं अधिक से अधिक दो के लिए इंतजार करेंगे. प्रथम सम्मिलन, curr, डिफ़ॉल्ट अशक्त बराबर. और इस लूप ही कार्यान्वित curr रिक्त नहीं है. तो कैसे मैं इस के आसपास मिल सकता है? मैं तीन हाथ देखते हैं. मैं तीन से अधिक के लिए इंतजार करेंगे. मार्कस, आप क्या सोचते हैं? दर्शक: ठीक है, अगर आप की जरूरत के लिए , एक से अधिक बार निष्पादित आप बस एक मत का समय पाश करने के लिए इसे बदल. जेसन Hirschhorn: ठीक है. कि हालांकि, हमारी समस्या का समाधान होगा? दर्शक: इस मामले में कोई की वजह सूची खाली है तथ्य यह है कि. तो फिर तुम शायद सिर्फ जोड़ने की जरूरत एक बयान कि यदि पाश से बाहर निकालता है तो आप के अंत में रहना होगा आप बात जिस पर कंपनियों की सूची, बस इसे डाल सकते. जेसन Hirschhorn: मैं उस तरह. यही समझ में आता है. लूप से बाहर निकालता है - यह यहां झूठी वापस कर देंगे, क्योंकि. तो पाश से बाहर निकालता है, तो हम पर रहे शायद सूची के अंत, या कुछ भी नहीं है कि अगर वहाँ एक सूची से शुरू यह, जो अंत के रूप में ही है. तो अब हम सम्मिलित करना चाहते हैं यहाँ कुछ. तो कैसे कि कोड, मार्कस दिखता है? दर्शक: आप पहले से ही नोड मिला malloced, तुम बस कह सकते हैं new_node-> अगले अशक्त क्योंकि बराबर होती है यह अंत में हो गया है. या new_node-> अगले अशक्त बराबर होती है. जेसन Hirschhorn: ठीक है. माफ़ कीजिए. New_node-> अगले बातिल के बराबर होती है हम अंत में कर रहे हैं. यही कारण है कि इसे अंदर डाल नहीं है हम इसे कैसे सूची में रखा है? ठीक है. वह सिर्फ बराबर करने के लिए यह सेटिंग है. कोई कैसे हम वास्तव में कर सूची में डाल दिया? की ओर इशारा करते है क्या सूची के अंत? दर्शक: सिर. जेसन Hirschhorn: क्षमा करें? दर्शक: सिर इशारा कर रहा है सूची के अंत में. जेसन Hirschhorn: कुछ भी नहीं में है तो सूची, सिर की ओर इशारा कर रहा है सूची के अंत. तो उस के लिए काम करेंगे प्रथम सम्मिलन. एक जोड़े हैं क्या बारे में अगर सूची में बातें? हम स्थापित करने के लिए नहीं करना चाहती की तुलना new_node के बराबर सिर. क्या हम वहाँ क्या करना चाहते हैं? हाँ? शायद पिछले. यह काम करेगा? पिछले बस याद है कि एक नोड के लिए एक संकेत. और पिछले एक स्थानीय चर रहा है. इसलिए इस लाइन एक स्थानीय चर की स्थापना की जाएगी, , पिछले के बराबर या इस नए नोड की ओर इशारा करते. कि वास्तव में यह नहीं डाल देगा हमारी सूची में है, यद्यपि. हम कैसे यह हमारी सूची में रखा है? Akchar? दर्शक: मैं आपको लगता है कि अगले वर्तमान> करते हैं. जेसन Hirschhorn: ठीक है. curr-> अगले. तो फिर, हम नीचे कर रहे हैं एक ही कारण यहाँ है, जो बराबर चालू करता है? दर्शक: अशक्त बराबर होती है. जेसन Hirschhorn: और तो क्या हम अगले अशक्त> क्या होता? क्या हम मिल जा रहा है? हम विखंडन दोष मिलेगा. दर्शक: क्या curr बातिल के बराबर होती है. जेसन Hirschhorn: यह एक ही बात है पिछला के रूप में, हालांकि, क्योंकि वहाँ हम स्थापित कर रहे हैं एक स्थानीय चर इस नए नोड के बराबर. चलो अपनी तस्वीर को वापस जाओ के बारे में कुछ डालने. हम अंत में डालने कह रहे हैं सूची की, यहीं तो. हम है कि एक वर्तमान सूचक है अशक्त की ओर इशारा करते हैं और पिछले एक बिंदु कि 8 की ओर इशारा करते है. तो क्या हम AVI, अद्यतन करने की जरूरत है? दर्शकों: पहला> अगले? जेसन Hirschhorn: पहला> आगे क्या है हम अद्यतन करना चाहते हैं क्योंकि यह है कि वास्तव में यह डालने जाएगा सूची के अंत. हम अभी भी है, हालांकि, एक बग है हम में चलाने के लिए जा रहे हैं. उस बग क्या है? हाँ? दर्शक: इसे वापस करने के लिए जा रहा है इस मामले में झूठा? जेसन Hirschhorn: ओह, यह है झूठी वापस जाने के लिए जा रहा है. लेकिन एक और बग है. इसलिए हम वापसी सच में डाल करने की आवश्यकता होगी. दर्शक: करता पिछले अभी भी बराबर सूची के शीर्ष पर अशक्त? जेसन Hirschhorn: तो पिछले अभी भी बहुत शुरुआत में अशक्त के बराबर होती है. तो कैसे हम उस पर प्राप्त कर सकते हैं? हाँ? दर्शक: मैं तुम्हें एक चेक कर सकते हैं लगता है अगर यह जबकि पाश को देखने के लिए पहले एक खाली सूची. जेसन Hirschhorn: ठीक है. तो चलो यहाँ चलते हैं. एक जांच करो. तो - दर्शक: तो अगर सिर बराबर होती बातिल के बराबर होती है. जेसन Hirschhorn: यदि सिर बराबर होती बातिल के बराबर होती है - यह एक खाली सूची है कि अगर हमें बताता हूँ. और फिर आप: दर्शकों कर सिर नई बराबर होती है. जेसन Hirschhorn: प्रमुख new_node के बराबर होती है? और क्या हम ऐसा करने की क्या ज़रूरत है? दर्शक: और फिर तुम सच वापसी. जेसन Hirschhorn: काफी नहीं है. हम एक कदम याद आ रहे हैं. दर्शक: New_node अगले अशक्त करने के लिए बात करने के लिए है. जेसन Hirschhorn: बिल्कुल, Alden. और फिर हम सच लौट सकते हैं. ठीक है. लेकिन यह अभी भी बातें करने के लिए एक अच्छा विचार है सूची के अंत में, सही? ठीक है. हम वास्तव में अभी भी मिल सकता है सूची के अंत में. हम पर कर रहे हैं तो यह कोड ठीक है सूची के अंत और कुछ कर रहे हैं सूची में बातें? है ना? हम अभी भी माक्र्स का विचार किया है. हम इस पाश से बाहर निकलें सकता है क्योंकि हम सूची के अंत में कर रहे हैं. इसलिए हम अभी भी यह चाहते हैं यहाँ नीचे कोड? दर्शक: हाँ. जेसन Hirschhorn: हाँ. और क्या हम इस परिवर्तन की जरूरत है? यह सच है. क्या है कि ध्वनि अच्छा हर किसी को अब तक? किसी को भी किसी भी है - AVI, आप जोड़ने के लिए कुछ है? दर्शकों: नहीं जेसन Hirschhorn: ठीक है. तो हम परिवर्तन की एक जोड़ी बनाई है. हम पहले यह चेक कर दिया है एक खाली सूची के लिए में चला गया. तो हम एक खाली सूची का ध्यान रखा है. और यहाँ हम डालने का ख्याल रखा सूची के अंत में कुछ. तो यह इस समय पाश लेने की तरह लगता है बीच में बातों का ध्यान, कहीं सूची में अगर वहाँ चीजों की सूची में हैं. ठीक है. हमें फिर से इस कार्यक्रम चलाते हैं. सफल नहीं. दर्शक: आप यह नहीं बना था. जेसन Hirschhorn: ओह, मैं यह नहीं बना था. अच्छी बात है, माइकल. के जुड़े एक बनाने जोड़ दें. रेखा 87 वहाँ एक त्रुटि है. रेखा 87. Alden, यह तुमने मुझे दिया लाइन थी. क्या गलत है? दर्शक: यह शून्य करने के लिए हो गया है. जेसन Hirschhorn: उत्कृष्ट. बिल्कुल सही. यह शून्य होना चाहिए. चलो फिर से करते हैं. संकलित करें. ठीक है. तीन सम्मिलित करते हैं. डालने में सफल रहा था. चलो इसे बाहर मुद्रित करते हैं. ओह, केवल हम जाँच कर सकता. लेकिन हम ऐसा नहीं किया है अभी तक समारोह मुद्रित. कुछ और दर्ज करते हैं. हम क्या दर्ज करना चाहिए? दर्शक: सात. जेसन Hirschhorn: सात? दर्शक: हाँ. जेसन Hirschhorn: हम एक seg गलती है. तो हम एक मिल गया है, लेकिन हम स्पष्ट रूप से दो नहीं मिल सकता है. यह 5:07 है. इसलिए हम इस डिबग सकता तीन मिनट के लिए. लेकिन मैं यहाँ हमें छोड़ने के लिए जा रहा हूँ और टेबल हैश पर चलते हैं. लेकिन फिर, इस कोड के लिए जवाब मैं एक बिट में आप के लिए यह ईमेल करेंगे. हम यह करने के बहुत करीब हैं. मैं अत्यधिक यह पता लगाने के लिए प्रोत्साहित क्या यहाँ पर जा रहा है और यह ठीक है. तो मैं के रूप में आप इस कोड को ईमेल करेंगे प्लस समाधान अच्छी तरह से - बाद में शायद समाधान. सबसे पहले इस कोड. मुझे लगता है हम पहले क्या करना चाहते अन्य बात खत्म हम कुछ भी मुक्त नहीं किया है. तो मैं तुम्हें दिखाने के लिए क्या चाहते हैं Valgrind की तरह दिखता है. हम वेलग्रिंड सीमाओं चलाते हैं हमारे कार्यक्रम पर,. / जुड़ा हुआ है. फिर, यह स्लाइड के अनुसार, हम कुछ प्रकार के साथ वेलग्रिंड चलाना चाहिए इस मामले में विकल्प, - रिसाव की जांच = पूर्ण. तो चलो वेलग्रिंड लिखें - रिसाव की जांच = पूर्ण. तो इस वेलग्रिंड चलेंगे हमारे कार्यक्रम पर. और अब कार्यक्रम वास्तव में चलाता है. तो हम बस की तरह इसे चलाने के लिए जा रहे हैं इससे पहले, अंदर कुछ डाल मैं तीन में रखा जा रहा हूँ. यह काम करता है. मैं कुछ में डाल करने के लिए प्रयास करने के लिए नहीं जा रहा हूँ हम करने जा रहे हैं किसी और वजह उस मामले में एक SEG झूठी मिलता है. तो मैं बस छोड़ने के लिए जा रहा हूँ. और अब तुम यहाँ नीचे देख रिसाव और ढेर सार. ये अच्छी बातें कर रहे हैं कि तुम बाहर की जाँच करना चाहते हैं. तो ढेर सार - इसे कहते हैं, उपयोग में बाहर निकलने पर - एक ब्लॉक में आठ बाइट्स. यही एक ब्लॉक है नोड हम malloced. माइकल, तुम एक नोड आठ से पहले कहा यह पूर्णांक है काटता है क्योंकि और सूचक. इसलिए कि हमारे नोड है. और फिर यह हम malloc का इस्तेमाल किया सात बार और हम मुक्त कर दिया कुछ छह बार. लेकिन हम मुक्त कभी नहीं कहा जाता है, तो मेरे पास है नहीं इस बारे में बात कर रही है विचार. लेकिन यह कहने के लिए पर्याप्त है कि जब आपके कार्यक्रम चलाता है, malloc बुलाया जा रहा है कुछ अन्य स्थानों में है कि हम के बारे में चिंता करने की जरूरत नहीं है. तो malloc शायद बुलाया गया था कुछ स्थानों में. हम जहां चिंता करने की जरूरत नहीं है. लेकिन यह वास्तव में हमें है. यह पहली पंक्ति हमें है. हम चाहते हैं कि ब्लॉक छोड़ दिया. और आपको लगता है कि यहाँ देख सकते हैं रिसाव सारांश में. अभी भी पहुँच - एक ब्लॉक में आठ बाइट्स. यही कि स्मृति का मतलब है - हम चाहते हैं कि स्मृति लीक कर दी है. निश्चित रूप से खो - कुछ अच्छे के लिए खो दिया है. आम तौर पर, आप नहीं होगा वहाँ कुछ भी दिखाई. अभी भी पहुँच में आम तौर पर है, जहां तुम चाहती हूँ जहाँ आप चीजों को देखेंगे क्या कोड तुम चाहिए देखने के लिए देखने के लिए मुक्त कर दिया लेकिन तुम मुक्त करने के लिए भूल गए हैं. और फिर यह मामला नहीं था हम नि: शुल्क सब कुछ किया था, हम देख सकते हैं कि. बस कार्यक्रम चलाते हैं कुछ में डाल नहीं. आप बाहर निकलने पर उपयोग में यहाँ नीचे देखेंगे - शून्य ब्लॉकों में शून्य बाइट्स. यही कारण है कि हम कुछ नहीं बचा था का मतलब इस कार्यक्रम से बाहर निकल गया है. तो pset6 में बदल से पहले, वेलग्रिंड चलाने और यकीन है कि तुम नहीं है कर किसी भी स्मृति अपने कार्यक्रम में लीक. आप वेलग्रिंड के साथ किसी भी प्रश्न हैं, बाहर तक पहुँचने के लिए स्वतंत्र. लेकिन यह कैसे आप इसे उपयोग है. बहुत आसान है - आप अगर देखना बाहर निकलने पर उपयोग में है - किसी भी ब्लाक में किसी भी बाइट्स. इसलिए हम डालने नोड पर काम कर रहे थे. मैं यहाँ दो अन्य कार्यों के लिए किया था - नोड्स और फ्री नोड्स मुद्रित. फिर, इन कर रहे हैं कि कार्य कर रहे हैं आप अभ्यास करने के लिए अच्छा होने वाला वे साथ आप न केवल मदद मिलेगी क्योंकि इन नमूना अभ्यास लेकिन यह भी समस्या पर निर्धारित किया है. वे चीजों को बहुत बारीकी से नक्शा आप में करने के लिए जा रहे हैं समस्या निर्धारित किया है. लेकिन मुझे यकीन है कि बनाने के लिए करना चाहते हैं हम सब कुछ पर स्पर्श. और हैश तालिकाओं भी महत्वपूर्ण हैं हम अनुभाग इस में क्या कर रहे हैं हफ्ते - या समस्या सेट में. इसलिए हम अनुभाग समाप्त करने के लिए जा रहे हैं हैश तालिकाओं के बारे में बात कर. अगर तुम नोटिस मैं बना एक छोटे हैश तालिका. यही कारण है कि हम बात कर रहे हैं क्या नहीं है हालांकि, के बारे में. हम एक अलग बात कर रहे हैं हैश तालिकाओं के प्रकार. और अपने मूल, एक हैश तालिका में एक से ज्यादा कुछ नहीं है सरणी के साथ साथ एक हैश समारोह. हम सिर्फ एक बिट के लिए बात करने के लिए जा रहे हैं यकीन है कि सब लोग क्या एक समझता बनाने हैश समारोह है. और मैं यह है कि अब तुम्हें बता रहा हूँ दो चीजों से ज्यादा कुछ नहीं - एक सरणी और एक हैश समारोह. और यहाँ कदम के माध्यम से कर रहे हैं जो इस चल रही है. हमारे सरणी है. हमारे समारोह है. विशेष रूप से, हैश कार्यों के लिए आवश्यकता इस के साथ चीजों की एक जोड़ी है. मैं विशेष रूप से बात करने जा रहा हूँ के बारे में इस समस्या को निर्धारित किया है. यह शायद जा रहा है एक स्ट्रिंग में ले. और क्या इसे वापस करने के लिए जा रहा है? क्या डेटा प्रकार? Alden? आपकी हैश समारोह में वापसी? एक पूर्णांक. तो यह क्या हैश है तालिका के होते हैं - सरणी के रूप में एक मेज और एक हैश समारोह. यह कैसे काम करता है? यह तीन चरणों में काम करता है. हम इसे एक चाबी दे. इस मामले में, हम इसे एक स्ट्रिंग देता हूँ. हम एक कदम प्रति हैश समारोह फोन कुंजी पर और हम एक मूल्य मिलता है. विशेष रूप से, हम कह देंगे हम एक पूर्णांक मिलता है. यही पूर्णांक, बहुत विशिष्ट होते हैं कि पूर्णांक हो सकता है क्या करने के लिए सीमा. इस उदाहरण में, हमारे सरणी आकार तीन की है. इसलिए कि पूर्णांक क्या नंबर हो सकता है. के लिए मान्य मान की सीमा क्या है कि पूर्णांक, इस का रिटर्न प्रकार समारोह हैश? शून्य, एक और दो. हैश समारोह के मुद्दे पर है सरणी में जगह यह पता लगाने हमारे चाबी कहाँ जा रहा है. केवल तीन संभव कर रहे हैं यहाँ स्थानों - शून्य, एक या दो. इसलिए इस समारोह बेहतर रिटर्न शून्य, एक या दो. इस सरणी में कुछ वैध indice. और फिर, यह रिटर्न के आधार पर जहां आप खुले वहाँ सरणी देख सकते हैं मूल्य ब्रैकेट. हम कुंजी कहाँ रखा है. तो हम कद्दू में फेंक, हम शून्य बाहर निकलना. सरणी कोष्ठक 0 में, हम कद्दू डाल दिया. हम एक बाहर निकलना, बिल्लियों में फेंक देते हैं. हम एक पर बिल्ली डाल दिया. हम मकड़ी में डाल दिया. हम दो बाहर निकलना. हम सरणी कोष्ठक दो पर मकड़ी डाल दिया. यह बहुत अच्छा होगा अगर यह उस तरह काम किया. लेकिन दुर्भाग्य से, हम देखेंगे यह थोड़ा और अधिक जटिल है. हम वहाँ किसी भी सवाल इससे पहले के बारे में इस बुनियादी एक हैश तालिका का सेट अप? यह वास्तव में एक छवि है हम बोर्ड पर आकर्षित किया. लेकिन जब से हम मैं इसे बोर्ड पर आकर्षित किया इसे में आगे जाने के लिए नहीं जा रहा हूँ. मूलतः चाबी, जादू ब्लैक बॉक्स - या इस मामले में, चैती बॉक्स - एक की हैश समारोह बाल्टी में उन्हें डालता है. और इस उदाहरण में हम कर रहे हैं नाम नहीं डाल रहा. हम जुड़े फोन डाल रहे हैं बाल्टी में नाम की संख्या. लेकिन तुम बहुत अच्छी तरह से कर सकता था बस बाल्टी में नाम डाल दिया. यह क्या है की सिर्फ एक तस्वीर है हम बोर्ड पर आकर्षित किया. हम हालांकि, संभावित नुकसान है. और दो विशेष रूप से कर रहे हैं मैं जाना चाहता हूँ कि स्लाइड. पहले एक के बारे में है एक हैश समारोह. तो मैंने सवाल पूछा क्या एक अच्छा हैश समारोह बनाता है? मैं दो जवाब दे. पहले यह नियतात्मक है कि है. हैश कार्यों के संदर्भ में, इसका क्या मतलब है? हाँ? दर्शक: इसे पा सकते हैं लगातार समय में सूचकांक? जेसन Hirschhorn: कि इसका क्या मतलब नहीं है. लेकिन यह है कि एक अच्छा लगता है. किसी और एक अनुमान है इसका क्या मतलब है? यह एक अच्छा हैश समारोह नियतात्मक है? एनी? दर्शक: एक कुंजी केवल मैप कर सकते हैं हैश तालिका में एक जगह के लिए. जेसन Hirschhorn: यह है बिल्कुल सही. आप कद्दू में डाल हर बार, यह हमेशा शून्य देता है. आप कद्दू और अपने हैश में डाल दिया समारोह शून्य देता है, लेकिन एक है कुछ लौटने की संभावना शून्य की तुलना में और अधिक से अधिक - तो शायद यह कभी कभी एक वापसी कर सकते हैं या दो अन्य बार - कि एक अच्छा हैश समारोह नहीं है. आप बिल्कुल सही कह रहे हैं. आपकी हैश समारोह लौट जाना चाहिए के लिए इस मामले में एक ही सटीक पूर्णांक,, एक ही सटीक स्ट्रिंग. शायद यह एक ही सटीक पूर्णांक देता है एक ही सटीक स्ट्रिंग के लिए चाहे. लेकिन उस मामले में यह अभी भी है नियतात्मक क्योंकि कई बातें एक ही मूल्य पर मैप किए जाते हैं. यह ठीक है. के रूप में लंबे समय से एक ही वहाँ के रूप में किसी दिए गए इनपुट के लिए उत्पादन. ठीक है. दूसरी बात यह है कि यह वैध सूचकांक देता है. हम चाहते हैं कि पहले लाया. इस हैश समारोह - ओह लड़के - एक हैश कार्य करना चाहिए वैध सूचकांक वापसी. तो कहते हैं - की पीठ इस उदाहरण के लिए चलते हैं. मेरा हैश समारोह ऊपर गिना जाता है शब्द में पत्र. हैश समारोह है. और कहा कि पूर्णांक देता है. मैं शब्द एक है, तो यह बात है एक वापस करने के लिए जा रहा है. और यह सही यहाँ एक डाल करने के लिए जा रहा है. क्या मैं शब्द बल्लेबाजी में डाल दिया तो क्या होगा? यह तीन लौटने के लिए जा रहा है. जहां बल्ले जाना है? यह फिट नहीं है. लेकिन यह कहीं जाने की जरूरत है. इस सब के बाद मेरे हैश तालिका है, और सब कुछ कहीं जाने की जरूरत है. इसलिए जहां बल्ले जाना चाहिए? किसी भी विचार? अनुमान? अच्छा अनुमान? दर्शक: शून्य. जेसन Hirschhorn: क्यों शून्य? दर्शक: क्योंकि तीन सापेक्ष तीन शून्य है? जेसन Hirschhorn: तीन सापेक्ष तीन शून्य है. यह एक बहुत अच्छा लगता है, और यह सही है. तो इस मामले में यह चाहिए शायद शून्य पर चलते हैं. तो एक अच्छा तरीका यह सुनिश्चित करने के लिए कि इस हैश समारोह केवल वैध सूचकांक है रिटर्न तालिका के आकार के द्वारा यह सापेक्ष है. आप ने जो भी इस रिटर्न सापेक्ष हैं तीन, आप हमेशा पाने के लिए जा रहे हैं शून्य, एक, और दोनों के बीच कुछ है. और यह हमेशा सात देता है, और अगर आप हमेशा तीन से modulo, आप कर रहे हैं हमेशा एक ही बात हो जा रही है. तो यह अभी भी नियतात्मक है आप सापेक्ष है. लेकिन यह सुनिश्चित करेंगे कि आपको लगता है कि कुछ कभी नहीं मिलता है - एक अवैध उद्योग. आम तौर पर, कि सापेक्ष होना चाहिए अपने हैश समारोह के अंदर. तो क्या आप इस बारे में चिंता करने की जरूरत नहीं है. तुम बस यह सुनिश्चित कर सकते हैं यह एक वैध indice है. इस पर किसी भी सवाल संभावित ख़तरा? ठीक है. और हम वहाँ जाते हैं. अगले संभावित ख़तरा है, और इस बड़े से एक है. क्या होगा अगर दो चाबी नक्शा एक ही मूल्य है? तो इस संभाल करने के दो तरीके हैं. पहले एक रेखीय कहा जाता है मैं कर रहा हूँ, जो जांच कर रही ऊपर जाने के लिए नहीं जा रहा. लेकिन आप से परिचित होना चाहिए कि कैसे वह काम करता है और वह क्या है. मैं पर जाने के लिए जा रहा हूँ दूसरा एक कि कि कई एक है क्योंकि लोगों को शायद तय करने को खत्म हो जाएगा उनकी समस्या सेट में उपयोग करने के लिए. बेशक, आप की जरूरत नहीं है. लेकिन समस्या यह सेट, कई लोगों के लिए एक हैश तालिका बनाने के लिए चयन करते हैं लागू करने के लिए अलग श्रृंखलन के साथ उनके शब्दकोश. इसलिए हम इसका क्या मतलब है पर जाने के लिए जा रहे हैं के साथ एक हैश तालिका बनाने के लिए अलग श्रृंखलन. इसलिए मैं कद्दू में डाल दिया. यह शून्य देता है. और मैं यहाँ कद्दू डाल दिया. तब मैं में डाल - एक और हेलोवीन थीम्ड बात क्या है? दर्शक: कैंडी. जेसन Hirschhorn: कैंडी! यह एक महान एक है. मैं कैंडी, और कैंडी में डाल मुझे भी शून्य देता है. मुझे क्या करना चाहिए? किसी भी विचार? आप सभी की तरह पता है अलग क्या श्रृंखलन है. तो किसी भी विचारों क्या करना है? हाँ. दर्शक: स्ट्रिंग लाना वास्तव में हैश तालिका में. जेसन Hirschhorn: तो हम करने जा रहे हैं यहाँ पर अच्छा विचार आकर्षित. ठीक है. दर्शक: Hashtable है [सुनाई] को इंगित करता सूचक एक सूची की शुरुआत. और फिर कद्दू पहले मान हो गए हैं कि लिंक की गई सूची और कैंडी में हो कि लिंक की गई सूची में दूसरे मूल्य. जेसन Hirschhorn: ठीक है. मार्कस, कि बकाया था. मुझे लगता है कि नीचे तोड़ने के लिए जा रहा हूँ. मार्कस कर कह रहा है कि नहीं कद्दू के ऊपर लिख. यह बुरा होगा. कहीं और कैंडी मत डालो. हम शून्य पर दोनों डाल करने के लिए जा रहे हैं. लेकिन हम से निपटने के लिए जा रहे हैं द्वारा शून्य पर उन्हें लगा शून्य में एक सूची बनाने के. और हम की एक सूची बनाने के लिए जा रहे हैं शून्य करने के लिए मैप है कि सब कुछ. और हम बनाने के लिए सीखा सबसे अच्छा तरीका बढ़ने और सिकुड़ कर सकते हैं कि एक सूची गतिशील रूप से भीतर नहीं है एक और सरणी. इसलिए नहीं एक बहु - आयामी सरणी. लेकिन सिर्फ एक लिंक सूची बनाने के लिए. तो क्या वह प्रस्तावित - मैं एक नया पाने के लिए जा रहा हूँ - , संकेत के साथ एक सरणी बनाने है संकेत की एक सरणी. ठीक है. किसी भी विचार या संकेत किस प्रकार इस संकेत के लिए किया जाना चाहिए? मार्कस? दर्शक: करने के लिए संकेत - जेसन Hirschhorn: तुम क्योंकि एक लिंक की गई सूची तो, कहा - दर्शक: नोड संकेत? जेसन Hirschhorn: नोड संकेत दिए. यदि हमारे लिंक किए गए में बातें सूची नोड्स तो वे कर रहे हैं नोड संकेत होना चाहिए. और वे शुरू में बराबर क्या करते हैं? दर्शक: अशक्त. जेसन Hirschhorn: अशक्त. इसलिए हमारे खाली बात नहीं है. कद्दू रिटर्न शून्य. हम क्या करते हैं? इसके माध्यम से मुझे चलना? दरअसल, मार्कस मुझे पहले ही दे दी है. किसी और को यह माध्यम से मुझे चलना. हम क्या करते हैं जब हम - इस के समान दिखता है हम अभी क्या कर रहे थे. Avi. दर्शक: मैं एक अनुमान ले जा रहा हूँ. तो आप कैंडी मिलता है. जेसन Hirschhorn: हाँ. खैर, हम कद्दू मिला. चलो हमारे पहले एक मिलता है. हम कद्दू मिला. दर्शक: ठीक है. कद्दू रिटर्न शून्य. तो आप उस में डाल दिया. या वास्तव में, आप इसे डाल लिंक की गई सूची में. जेसन Hirschhorn: हम कैसे करते हैं लिंक की गई सूची में डाल दिया? दर्शक: ओह, वास्तविक वाक्यविन्यास? जेसन Hirschhorn: बस चलना - और अधिक कहने की. हम क्या करते हैं? दर्शक: आपने अभी सम्मिलित यह पहला नोड के रूप में. जेसन Hirschhorn: ठीक है. इसलिए हम अपने नोड, कद्दू है. और अब मैं इसे कैसे सम्मिलित करते हैं? दर्शक: आप आवंटित सूचक के लिए यह. जेसन Hirschhorn: कौन सा सूचक? दर्शक: शून्य पर सूचक. जेसन Hirschhorn: तो जहां इस बिंदु करता है? दर्शक: ठीक है अब अशक्त करने के लिए. जेसन Hirschhorn: ठीक है, यह शून्य की ओर इशारा करते है. लेकिन मैं कद्दू में डाल रहा हूँ. तो जहां यह इंगित करना चाहिए? दर्शक: कद्दू के लिए. जेसन Hirschhorn: कद्दू के लिए. बिल्कुल सही. तो इस कद्दू को दिखाता है. और जहां इस सूचक करता है कद्दू बिंदु में? तक दर्शक: अशक्त. जेसन Hirschhorn: अशक्त करने के लिए. बिल्कुल सही. इसलिए हम अभी कुछ डाला लिंक की गई सूची में. हम सिर्फ यह करने के लिए इस कोड लिखा था. लगभग हम लगभग यह मिला पूरी तरह से पक्का हो गया. अब हम कैंडी डालें. हमारे कैंडी भी शून्य हो जाता है. इसलिए हम कैंडी के साथ क्या करते हो? दर्शक: यह क्या है या पर निर्भर करता है हम इसे सुलझाने की कोशिश कर रहे हैं नहीं. जेसन Hirschhorn: यह है बिल्कुल सही. यह पर निर्भर करता है कि क्या है या नहीं हम इसे सुलझाने की कोशिश कर रहे हैं. हम नहीं कर रहे हैं की कल्पना करते हैं यह सॉर्ट करने के लिए जा रहा है. दर्शक: तो ठीक है, हम चर्चा के रूप में इससे पहले, यह सिर्फ यह डाल करने का सबसे सरल है सही शुरुआत में तो सूचक कैंडी के लिए शून्य अंक से. जेसन Hirschhorn: ठीक है. रुको. मुझे यहीं कैंडी पैदा करते हैं. तो इस सूचक - दर्शक: हाँ, अब चाहिए कैंडी की ओर इशारा किया. तब सूचक से है कद्दू को कैंडी बिंदु. जेसन Hirschhorn: उस तरह? और हम एक और मिल गया है कहना शून्य करने के लिए मैप करने के लिए बात है? दर्शक: ठीक है, तुम बस एक ही बात करते हैं? जेसन Hirschhorn: एक ही बात करो. तो इस मामले में, अगर हम नहीं यह इसे हल रखना चाहते हैं बल्कि आसान लगता है. हम indice में सूचक ले हमारे हैश समारोह द्वारा दिए. हम अपने नए नोड के लिए उस बिंदु है. और फिर यह इशारा कर रहा था जो कुछ भी पहले को - इस मामले में अशक्त, में दूसरे मामले कद्दू - यह करने के लिए इशारा कर रहा है कि, जो भी इससे पहले, हम अगले में जोड़ हमारे नए नोड. हम कुछ डालने रहे हैं शुरुआत में. वास्तव में यह एक बहुत से सरल है क्रमबद्ध सूची में रखने की कोशिश कर रहा. लेकिन फिर, खोज की जाएगी अधिक यहाँ पर जटिल. हम हमेशा अंत करने के लिए जाना होगा. ठीक है. अलग श्रृंखलन के बारे में कोई सवाल? यह कैसे काम करता है? अब के लिए कहें. मैं वास्तव में यकीन है कि तुम सब करना चाहते हैं हम बाहर सिर से पहले इस बात को समझ. दर्शक: क्यों तुम कद्दू रखा है और उसी में कैंडी हैश तालिका का हिस्सा है? जेसन Hirschhorn: अच्छा सवाल है. क्यों हम एक ही में डाल दिया है हैश तालिका का हिस्सा है? खैर, इस मामले में हमारे हैश समारोह रिटर्न उन दोनों के लिए शून्य. इसलिए वे indice शून्य पर जाने की जरूरत हम करने जा रहे हैं कि क्योंकि जहां उन्हें देखने के लिए अगर हम कभी उन्हें देखना चाहता हूँ. फिर, एक रेखीय जांच कर दृष्टिकोण के साथ हम शून्य पर उन दोनों को नहीं रखा जाएगा. लेकिन अलग श्रृंखला दृष्टिकोण में, हम शून्य पर दोनों डाल करने के लिए जा रहे हैं और फिर शून्य से दूर एक सूची बना. और हम कद्दू के ऊपर लिख नहीं करना चाहती बस उस के लिए तो हम हूँ क्योंकि कद्दू था कि मान डाला कभी नहीं. हम बस में एक बात रखने के लिए बुरा होगा कि स्थान. तो फिर वहाँ होगा कोई कभी हम में से मौका - हम कभी एक नकली था, तो हम बस हमारी प्रारंभिक मूल्य मिटाना होगा. हम इस दृष्टिकोण करना तो इसलिए. हम क्यों चुना या कि है - लेकिन फिर, हम अलग श्रृंखलन दृष्टिकोण चुना है, कई अन्य तरीके हैं जो एक चुन सकते हैं. कि आपके सवाल का जवाब है? ठीक है. कार्लोस. रैखिक की जांच कर शामिल होगा - हम शून्य पर एक टक्कर पाया, तो हम देखने के लिए अगले जगह में लगेगा यह खुला था और वहाँ रखा. और फिर हम अगले खेल में देखो और कि खुला था अगर देखते हैं और वहाँ रखा. इसलिए हम अगले उपलब्ध लगता है खुली जगह और वहाँ रखा. अन्य प्रश्न? हाँ, AVI. दर्शक: एक कि अनुवर्ती करने के रूप में, आप अगले जगह से क्या मतलब है? हैश तालिका में या एक लिंक की गई सूची में. जेसन Hirschhorn: रैखिक के लिए प्रोग्रामिंग, कोई लिंक सूचियों. हैश तालिका पर अगले जगह. दर्शक: ठीक है. तो हैश तालिका होगा आकार करने के लिए प्रारंभ - तारों की संख्या की तरह आप डालने गया है? जेसन Hirschhorn: तुम होगा यह वास्तव में बड़ा होना चाहता हूँ. हां. यहाँ क्या हम में से एक तस्वीर है सिर्फ बोर्ड पर आकर्षित किया. फिर, हम यहीं एक टक्कर है. 152 में. और तुम हम बनाया देखेंगे इसे दूर एक लिंक की गई सूची. फिर, हैश तालिका अलग श्रृंखलन दृष्टिकोण एक तुम नहीं है समस्याओं सेट के लिए ले जाना है छह लेकिन एक है कि का एक बहुत छात्रों को लेने के लिए जाते हैं. तो उस पर ध्यान दें, हम संक्षेप में बात करते हैं हम समस्या के बारे में छह बाहर सिर से पहले और फिर मैं आप के साथ एक कहानी का हिस्सा हूँ. हम तीन मिनट है. समस्या छह सेट. आप चार कार्य किया है - लोड, आकार, और अनलोड की जाँच करें. लोड - ठीक है, हम जा रहा है बस अब लोड खत्म. हम बोर्ड पर लोड आकर्षित किया. और हम भी की एक बहुत कोडन शुरू एक लिंक की गई सूची में डालने. तो भार की तुलना में अधिक नहीं है हम अभी क्या कर रहा है. आप एक बार जांच है कुछ भरा हुआ है. इसे इस रूप में एक ही प्रक्रिया है. तुम फेंक, जहां एक ही पहले दो भागों हैश समारोह में कुछ और इसके मूल्य मिलता है. लेकिन अब हम इसे डालने नहीं कर रहे हैं. अब हम इसके लिए देख रहे हैं. मैं नमूना कोड को खोजने के लिए लिखा है एक लिंक की गई सूची में कुछ. मुझे लगता है कि अभ्यास करने के लिए प्रोत्साहित करते हैं. लेकिन intuitively कुछ है खोजने कुछ डालने के लिए सुंदर समान. दरअसल, हम पाने की एक तस्वीर आकर्षित किया एक लिंक की गई सूची में कुछ चलती है, आप समाप्त करने के लिए मिला है जब तक के माध्यम से. और तुम अंत करने के लिए मिला है और नहीं कर सका यह लगता है, तो यह वहाँ नहीं है. तो यह है कि अनिवार्य रूप से, चेक है. अगला आकार है. के आकार को छोड़ दें. अंत में आप उतारना है. अनलोड हम तैयार नहीं है, एक है बोर्ड पर या अभी तक कोडित. लेकिन मैं आपको यह कोडिंग की कोशिश करने के लिए प्रोत्साहित करते हैं हमारे नमूना लिंक की गई सूची के उदाहरण में. लेकिन intuitively उतारना मुफ्त के समान है - या मेरा मतलब है की जाँच करने के समान है. आप जा रहे हैं अब हर समय के लिए छोड़कर के माध्यम से, आप बस के लिए जाँच नहीं कर रहे हैं आप वहां अपने मूल्य है देखने. लेकिन आप उस नोड ले रही है और कर रहे हैं अनिवार्य रूप से, यह मुक्त. यही अनलोड कर पूछता है तुम क्या है. आप malloced किया है नि: शुल्क सब कुछ. तो आप पूरी सूची के माध्यम से जा रहे हैं फिर, पूरे हैश के माध्यम से जा रहा तालिका फिर से. इस बार की जाँच नहीं है वहाँ क्या देखने के लिए. बस क्या वहाँ मुक्त. और अंत में आकार. साइज लागू किया जाना चाहिए. आप आकार को लागू नहीं करते हैं - मैं इस तरह से यह कहता हूँ. आप बिल्कुल में आकार को लागू नहीं करते हैं सहित कोड की एक पंक्ति बयान लौटने के लिए, आप कर रहे हैं गलत तरीके से आकार कर. तो पूरा डिजाइन के लिए, यकीन है कि आकार बनाने अंक, आप वास्तव में एक में यह कर रहे हैं सहित कोड की रेखा, वापसी बयान. और, अभी तक Akchar को पैक नहीं है. उत्सुक बीवर. मैं आप लोगों को धन्यवाद कहना चाहता था अनुभाग में आने के लिए. एक खुश हेलोवीन है. यह मेरी पोशाक है. मैं गुरुवार को यह पहनने होंगे मैं कार्यालय समय में आप देखते हैं. और तुम कुछ और के बारे में उत्सुक हैं पृष्ठभूमि इस पोशाक के रूप में लग रहा है 2011 अनुभाग की जाँच करने के लिए स्वतंत्र मैं क्यों हूँ पर एक कहानी के लिए कद्दू पोशाक पहने हुए. और यह एक दुखद कहानी है. तो सुनिश्चित करें कि आप क्या है पास के कुछ ऊतकों. लेकिन उस पर, अगर आप किसी भी मैं चारों ओर रहूँगा सवाल बाहर अनुभाग के बाद. गुड लक समस्या पर छह सेट. और हमेशा की तरह, अगर आप किसी भी सवाल है, मुझे पता है.