Speaker A
हाय एवरीवन एंड टुडे वी आर गोइंग टू अंडरस्टैंड द कांसेप्ट एंड इंप्लीमेंटेशन ऑफ अ सर्कुलर क्यू। अब इसके अलावा अगर हमें डीएसए का कोई और क्वेश्चन करना है तो वो हमें इस प्लेलिस्ट के अंदर अवेलेबल मिल जाएगा। आल्सो देयर इज़ अ लिंक फॉर कंपनी वाइज डीएसए शीट इन द डिस्क्रिप्शन बॉक्स। तो स्टार्ट करते हैं अपने कांसेप्ट के साथ। टुडे वी आर गोइंग टू अंडरस्टैंड द कांसेप्ट ऑफ़ अ सर्कुलर क्यू। अब सर्कुलर क्यू को इमेजिन करने से पहले लेट अस टॉक अबाउट अ नॉर्मल क्यू। हम जब भी अपनी नॉर्मल क्यू की बात करते हैं, वो क्यू कुछ ऐसी दिखती है जिसके अंदर वी जनरली हैव अ फ्रंट एंड वी हैव अ रियर एंड। हम किसी भी एलिमेंट को इंसर्ट करते हैं तो उसे रियर एंड से इंसर्ट किया जाता है। एलिमेंट्स को अगर पॉप करना होता है तो उन्हें हम फ्रंट से पॉप कर रहे होते हैं। तो दिस इज हाउ अ नॉर्मल क्यू फंक्शंस एंड दिस इज अ फीफो टाइप ऑफ़ स्ट्रक्चर। जब भी हम एक सर्कुलर क्यू की बात करते हैं तो वहां पर वी इमेजिन अ स्ट्रक्चर लाइक दिस व्हिच इज सर्कुलर इन नेचर, जिसके अंदर हम अपने डिफरेंट डिफरेंट एलिमेंट्स को स्टोर कर सकते हैं। इस सर्कुलर क्यू के अंदर भी हमारे पास एक फ्रंट होता है एंड वी आल्सो हैव अ रियर एंड। जैसे एक नॉर्मल क्यू के अंदर जब भी हम पुश करते हैं, हमें पता है हमारा जो पुश ऑपरेशन होता है वह हमेशा रियर पर होता है। रियर कहने का मतलब है कि जहां पर भी हमारा रियर एजिस्ट करता है, वहां पर हम अपने न्यू एलिमेंट को पुश करते हैं। उसके बाद नेक्स्ट एलिमेंट को पुश करने के लिए रियर को अपडेट कर देंगे। नेक्स्ट एलिमेंट को पुश करेंगे, उसके बाद दोबारा से हम अपने रियर को अपडेट कर देंगे। हम अपने नेक्स्ट एलिमेंट को पुश करेंगे तो नॉर्मल क्यू के अंदर जो पुश ऑपरेशन रियर एंड पर होता है, वैसे ही सर्कुलर क्यू के अंदर भी वर्क करता है। अगर हम पॉप की बात करें तो जैसे नॉर्मल क्यू के अंदर पॉप होते हैं एलिमेंट्स फ्रॉम द फ्रंट, वैसे ही सर्कुलर क्यू के अंदर होते हैं। जैसे अगर हमें एलिमेंट को पॉप करना है तो हम इस वन को पॉप करेंगे एंड अपने फ्रंट को सिंपली कर देंगे अपडेट। तो इस तरीके से हमारे पास ये एक जो एलिमेंट है वो डिलीट हो जाएगा। जब भी हमें फ्रंट वैल्यू चाहिए तो जैसे एक नॉर्मल क्यू के अंदर फ्रंट मिलता है, वैसे ही सर्कुलर क्यू से हम फ्रंट की वैल्यू प्रिंट करवा सकते हैं। अब ये फ्रंट है टू के इक्वल तो हम टू को प्रिंट करवा देंगे। नॉर्मल क्यू की तरह हमारी सर्कुलर क्यू भी फीफो स्ट्रक्चर ही होता है, बट देयर इज़ अ स्लाइट डिफरेंस बिटवीन अ नॉर्मल क्यू एंड अ सर्कुलर क्यू। दैट इज़ कि जनरली सर्कुलर क्यू को जब भी हम इंप्लीमेंट करते हैं, उसका अपना एक फिक्स साइज होता है तभी सर्कुलर क्यू होने का सेंस बनेगा। तो सर्कुलर क्यू के अंदर हम अपने एलिमेंट्स को एक सर्कुलर मैनर में इंसर्ट कर सकते हैं। तो इस तरीके से हम अपने एलिमेंट्स को इंसर्ट कर सकते हैं। इट हैज अ फिक्स्ड कैपेसिटी एंड जनरली हमारा जो लास्ट एलिमेंट होता है उसके बाद हम अपने फर्स्ट एलिमेंट पर भी जाकर रिवर्स कर सकते हैं। सो दिस इज हाउ द कांसेप्ट ऑफ अ सर्कुलर क्यू वर्क्स। अब हम अपनी एक सर्कुलर क्यू को किस तरीके से इंप्लीमेंट कर सकते हैं। बेसिकली अपनी सर्कुलर क्यू को इंप्लीमेंट करने के लिए हम यूज करेंगे एक एरे का। एरे हमें एक फिक्स साइज़ का जनरल स्ट्रक्चर प्रोवाइड करता है जिसके अंदर हम एलिमेंट्स को स्टोर कर सकते हैं। तो वैसे ही हम अपनी सर्कुलर क्यू को इंप्लीमेंट करने के लिए अपने एक एरे को यूज़ कर सकते हैं जिसके अंदर एक फिक्स्ड साइज़ या एक फिक्स्ड कैपेसिटी होगी। तो इसका जो भी साइज़ होगा दैट इज़ गोइंग टू बी द कैपेसिटी ऑफ़ द सर्कुलर क्यू। तो एक तरीके से हम ऐसे इमेजिन कर सकते हैं कि हमारे पास जो सर्कुलर क्यू थी उसको हमने ब्रेक कर दिया एंड वी हैव कन्वर्टेड दैट क्यू इंटू अ स्ट्रेट लाइन व्हिच इज बेसिकली आवर एरे स्ट्रक्चर। अब इस एरे के अंदर हम अपने डाटा को स्टोर करना स्टार्ट करेंगे। तो सर्कुलर क्यू लाइक अ नॉर्मल क्यू शुड हैव टू पॉइंट्स। एक उसके पास हमारा फ्रंट पॉइंटर होना चाहिए, एक रियर पॉइंटर होना चाहिए जिससे हम ट्रैक कर सके कि डाटा को कहां पर इंसर्ट करना है, कहां पर पुश करना है एंड कहां से पॉप करना है। तो उसके लिए वी विल मेक टू पॉइंट्स। एक हमारा फ्रंट पॉइंटर होने वाला है, एक हमारा रियर पॉइंटर होने वाला है। तो लेट अस सपोज हमने एक एरे क्रिएट किया विद अ कैपेसिटी ऑफ सिक्स। तो इस तरीके से हमारे पास उस एरे की फॉर्म में एक लार्ज क्यू आ गई। तो शुरुआत हम करेंगे फ्रंट एंड रियर पॉइंट्स के साथ। अभी क्योंकि शुरुआत में हमारी पूरी क्यू एम्टी है तो उस केस में हमारे जो फ्रंट एंड रियर की वैल्यू होगी उन्हें हम चाहें तो इनिशियलाइज़ कर सकते हैं विद -1 सो दैट वी नो दैट दे आर नॉट पॉइंट टू एनी वैलिड वैल्यू। उसके साथ में अपनी सर्कुलर क्यू के साथ हम उसका करंट साइज भी हमेशा स्टोर करके रखते हैं। करंट साइज से बेसिकली हम ट्रैक कर सकते हैं कि क्यू के अंदर कितनी एम्टी स्पेसेस हैं और कितना डाटा और इंसर्ट हो सकता है। एक हम करंट साइज ट्रैक करेंगे जिसको इनिशियली हम इनिशियलाइज़ करेंगे विद द वैल्यू ऑफ़ रो। एंड उसके साथ में हमारे पास हमारी क्यू की कैपेसिटी भी होगी, व्हिच इज बेसिकली इक्वल टू द सिक्स, व्हिच इज द साइज ऑफ़ द एरे। अब सर्कुलर क्यू को इंप्लीमेंट करने के लिए बेसिकली हमें इन तीन फंक्शंस को इंप्लीमेंट करना होता है विद अ टाइम कॉम्प्लेक्शन ऑफ बिग ओफ व। तो सबसे पहले अपने पुश फंक्शन की बात करते हैं। पुश कहने का मतलब है कि हम अपनी क्यू के अंदर एलिमेंट को इंसर्ट करना चाहते हैं एट द रियर एंड। तो फॉर एग्जांपल इस कैपेसिटी को हम थोड़ा सा और डिक्रीज करके लिखते हैं। लेट अस सपोज हमारी जो सर्कुलर क्यू है उसकी कैपेसिटी है 3 के इक्वल। तो उसके अंदर वी विल स्टार्ट बाय पुशिंग वन एलिमेंट, व्हिच इज़ इक्वल टू व। अब इस सिंगल एलिमेंट को पुश करने के लिए हमें पता है कि हम एलिमेंट को पुश करते हैं हमेशा एट द रियर एंड। अब नाउ आवर रियर पॉइंटर इज़ करेंटली पॉइंट टू दिस इंडेक्स -1। -1 कोई वैलिड इंडेक्स नहीं होता। तो जब भी हमें किसी भी एलिमेंट को पुश करना होगा सबसे पहले तो हमें अपने रियर पॉइंटर को प्लस प्लस करना होगा एंड उसके बाद रियर पॉइंटर जहां पर भी पॉइंट करेगा एरे के अंदर वहां पर हम अपने न्यू डाटा को स्टोर करा देंगे। तो बेसिकली रियर को प्लस प्लस करने के लिए हम यहां पर लेकर आएंगे। यहां पर वी विल स्टोर द डाटा वन। सिमिलरली अगर हमें दोबारा से पुश करना है एलिमेंट टू को तो दोबारा से हम अपने रियर को प्लस प्लस करेंगे और अपने सेकंड डाटा को पुश कर देंगे। दोबारा से हमें पुश करना है नई डाटा को तो यहां पर फिर से हम रियर को प्लस प्लस करेंगे एंड नाउ वी विल पुश अ न्यू एलिमेंट, व्हिच इज इक्वल टू 3। तो इस तरीके का बेसिक कांसेप्ट होगा जिसको हम फॉलो करेंगे जब भी हम अपनी क्यू के अंदर नए एलिमेंट्स को इंसर्ट करना चाहते हैं। तो दिस इज अ जनरल कांसेप्ट ऑफ पुश। अगर हम पॉप फंक्शन की बात करें तो पॉप के लिए हमें पता है कि एलिमेंट पॉप होना चाहिए फ्रॉम द फ्रंट। अब फ्रंट क्योंकि इनिशियलाइज़्ड है विद -1 तो हमारे पास कोई वैलिड इंडेक्स नहीं है फ्रंट के लिए। तो हम क्या कर सकते हैं? फ्रंट को -1 की जगह इनिश करने की जगह उसको हम ज़ीरो से इनिशियलाइज़ कर देंगे। हमें पता है इस एरे के अंदर बाय डिफॉल्ट हमारा फ्रंट एलिमेंट रोट इंडेक्स पर होगा। अगर फ्रंट चेंज होता है तो हम सिंपली फ्रंट को प्लस प्लस करेंगे पर उसकी शुरुआत हमेशा ज़ीरो इंडेक्स से होगी। तो हम जब भी इनिशियलाइज़ेशन कर रहे हैं, हम अपने फ्रंट को इनिशियलाइज़ कर देंगे -1 के साथ। तो फ्रंट को ज़ीरो से अगर इनिशियलाइज़ करेंगे तो वी विल ऑलवेज हैव आवर फ्रंट वैल्यू। तो जब भी हमें एलिमेंट्स को पॉप करना होगा हम सिंपली क्या कर सकते हैं? फ्रंट को कर सकते हैं प्लस प्लस। तो हमारा बेसिक लॉजिक होगा कि हम फ्रंट को प्लस प्लस कर देंगे तो ऑटोमेटिक जो भी एलिमेंट पुराने वाले फ्रंट की तरफ पॉइंट कर रहा होगा यह डिस्कार्ड हो जाएगा। अगली बार हम चाहे तो सर्कुलर मैनर में रियर आकर यहां पर अपने एलिमेंट्स को अपडेट कर सकता है। एंड देयर इज़ आल्सो वन मोर इंपोर्टेंट थिंग जो हमें सर्कुलर क्यू के पॉइंट्स के अपडेट्स में याद रखनी है। लेट अस सपोज हमारा जो रियर था इस पॉइंटर की शुरुआत यहां से हुई, फिर ये यहां पर आया, फिर ये यहां पर आया। अभी अगर हम अपने क्यू का साइज देखें तो ये एलिमेंट ऑलरेडी डिलीट हो चुका है। हमें पता है हमारी करंट क्यू का जो साइज है दैट इज इक्वल टू टू। साइज होने का मतलब है अगर कैपेसिटी थ्री है साइज टू है, इसका मतलब इसके अंदर एक और एलिमेंट इंसर्ट हो सकता है। तो उस एलिमेंट को इंसर्ट करने के लिए दोबारा पुश फंक्शन से हम क्या करेंगे? रियर को प्लस प्लस करेंगे। तो मतलब यहां पर पॉप करने के बाद हम क्या करना चाहते हैं? एक और एलिमेंट फोर उसे हम पुश करना चाहते हैं। अब पुश करने के लिए हमें अपने इस पॉइंटर को इंक्रीज करना पड़ेगा पर जब हम इस पॉइंटर को इंक्रीज करेंगे बाय वन तो ये एक इनवैलिड इंडेक्स पर चला जाएगा। पर हमें इसे इनवैलिड इंडेक्स पर नहीं भेजना। हमें इसे वापस से एट द स्टार्ट ऑफ द क्यू भेजना है। तो वो चीज करने के लिए जब भी हम अपने पॉइंट्स को अपडेट करेंगे चाहे वो हमारा रियर पॉइंटर हो गया चाहे वो हमारा फ्रंट पॉइंटर हो गया, अपने पॉइंट्स को अपडेट करने के लिए हम हमेशा करेंगे r + 1 मॉड्यूल द कैपेसिटी। जब भी हम r + 1 मॉड्यूल कैपेसिटी करते हैं तो हमें पता है हमारी जो रेंज होती है वो हमेशा ज़ीरो से कैपेसिटी के बीच में होगी। जब भी किसी भी नंबर का हम मॉड्यूल लेते हैं विद एनी नंबर, यहां जैसे यहां पर कैपेसिटी थ्री।