सर्कुलर बफर, साइक्लिक बफर या रिंग बफर एक ऐसा डेटा स्ट्रक्चर है जो एक ही निश्चित आकार के बफर का उपयोग इस तरह करता है मानो उसका अंतिम सिरा पहले सिरे से जुड़ा हो।
सर्कुलर बफर शुरू में खाली होता है और उसकी लंबाई पहले से तय होती है। उदाहरण के लिए, यह 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]
Exercism पर साइन अप कीजिए और Swift को 35 कॉन्सेप्ट116 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।
इस वीडियो में हम वृत्ताकार बफर पर नज़र डालते हैं: यह क्या है, कहाँ इस्तेमाल होता है, और इसके अलग-अलग कार्यान्वयन कौन-कौन से हैं। इनमें क्यू, स्टैटिक और डायनामिक ऐरे, इम्यूटेबल डेटा स्ट्रक्चर और एजेंट आधारित एक मज़ेदार कार्यान्वयन शामिल हैं।