ट्रैक
/
8th
8th
/
अभ्यास
/
वृत्ताकार बफर
वृत्ताकार बफर

वृत्ताकार बफर

मध्यम

निर्देश

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

सर्कुलर बफर शुरू में खाली होता है और उसकी लंबाई पहले से तय होती है। उदाहरण के लिए, यह 7 एलिमेंट वाला बफर है:

[ ][ ][ ][ ][ ][ ][ ]

मान लीजिए कि बफर के बीच में एक 1 लिखा जाता है (सर्कुलर बफर में शुरुआत की ठीक जगह से कोई अंतर नहीं पड़ता):

[ ][ ][ ][1][ ][ ][ ]

अब मान लीजिए कि दो और एलिमेंट, 2 और 3, जोड़े जाते हैं, जो 1 के बाद जुड़ जाते हैं:

[ ][ ][ ][1][2][3][ ]

अगर अब बफर से दो एलिमेंट हटाए जाएँ, तो बफर की सबसे पुरानी वैल्यू हट जाती हैं। इस स्थिति में हटाए गए दो एलिमेंट 1 और 2 हैं, और बफर में सिर्फ 3 बचता है:

[ ][ ][ ][ ][ ][3][ ]

जब बफर में 7 एलिमेंट हो जाते हैं, तो वह पूरी तरह भर जाता है:

[5][6][7][8][9][3][4]

जब बफर भर जाता है, तो एक एरर मिलती है, जो क्लाइंट को बताती है कि जब तक कोई स्लॉट खाली न हो जाए, तब तक और कुछ लिखा नहीं जा सकता।

जब बफर भर जाता है, तो क्लाइंट चाहे तो जबरन लिखकर सबसे पुराना डेटा ओवरराइट कर सकता है। इस स्थिति में दो और एलिमेंट, A और B, जोड़े जाते हैं और वे 3 और 4 को ओवरराइट कर देते हैं:

[5][6][7][8][9][A][B]

3 और 4 की जगह A और B आ गए हैं, जिससे अब बफर में 5 सबसे पुराना डेटा है। अंत में, अगर दो एलिमेंट हटाए जाएँ, तो 5 और 6 लौटाए जाएँगे, और बफर ऐसा हो जाएगा:

[ ][ ][7][8][9][A][B]

चूँकि जगह खाली है, अगर क्लाइंट फिर से ओवरराइट करके C और D संग्रहीत करता है, तो 7 और 8 की जगह नहीं, बल्कि वही जगह इस्तेमाल होगी जहाँ पहले 5 और 6 रखे गए थे। 7 अब भी सबसे पुराना एलिमेंट है और बफर एक बार फिर भर जाता है।

[C][D][7][8][9][A][B]

इस अभ्यास में कुछ ऐसे कॉन्सेप्ट हैं जो आपने शायद पहले नहीं देखे होंगे:

खुद का नेमस्पेस बनाना

8th में सारे शब्द किसी न किसी नेमस्पेस के होते हैं, जैसे a:new का मतलब है a नेमस्पेस का new शब्द।

आप अपने नेमस्पेस भी बना सकते हैं, और circular-buffer.8th फाइल के ऊपर हम यही करते हैं:

ns: cb

इसका मतलब है कि उस फाइल के सारे शब्द cb:<word> से इस्तेमाल किए जा सकते हैं। आपस में जुड़े कामों को एक साथ रखने का यह बढ़िया तरीका है।

ज़्यादा जानकारी के लिए नेमस्पेस का दस्तावेज़ देखिए।

एक्सेप्शन

read और write, दोनों शब्दों से उम्मीद की जाती है कि जब उन्हें गलत स्थिति वाले सर्कुलर बफर पर कॉल किया जाए तो वे एक्सेप्शन फेंकें।

ज़्यादा जानकारी के लिए एक्सेप्शन और एरर हैंडलिंग का दस्तावेज़ देखिए।

ऑब्जेक्ट

सर्कुलर बफर को आप जैसे चाहें वैसे बना सकते हैं, लेकिन 8th के ऑब्जेक्ट सपोर्ट को इस्तेमाल करने के बारे में भी सोच सकते हैं।


स्रोत

Wikipediaयह लिंक एक नई विंडो या टैब में खुलता है
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
8th Exercism

वृत्ताकार बफर शुरू करने के लिए तैयार हैं?

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

वृत्ताकार बफर को गहराई से जानिए!

इस वीडियो में हम वृत्ताकार बफर पर नज़र डालते हैं: यह क्या है, कहाँ इस्तेमाल होता है, और इसके अलग-अलग कार्यान्वयन कौन-कौन से हैं। इनमें क्यू, स्टैटिक और डायनामिक ऐरे, इम्यूटेबल डेटा स्ट्रक्चर और एजेंट आधारित एक मज़ेदार कार्यान्वयन शामिल हैं।