एक सर्कुलर बफर, साइक्लिक बफर या रिंग बफर एक डेटा स्ट्रक्चर है, जो एक ही तय आकार के बफर को ऐसे इस्तेमाल करता है मानो वह सिरे से सिरे तक जुड़ा हो।
शुरू में सर्कुलर बफर खाली होता है और उसकी लंबाई पहले से तय होती है। उदाहरण के लिए, यह 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 संग्रहीत करता है, तो जहाँ पहले 5 और 6 रखे गए थे वही जगह इस्तेमाल होगी, 7 और 8 की जगह नहीं। सबसे पुराना एलिमेंट अब भी 7 है और बफर एक बार फिर भर जाता है।
[C][D][7][8][9][A][B]
Exercism पर साइन अप कीजिए और Delphi Pascal को 76 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।
इस वीडियो में हम वृत्ताकार बफर पर नज़र डालते हैं: यह क्या है, कहाँ इस्तेमाल होता है, और इसके अलग-अलग कार्यान्वयन कौन-कौन से हैं। इनमें क्यू, स्टैटिक और डायनामिक ऐरे, इम्यूटेबल डेटा स्ट्रक्चर और एजेंट आधारित एक मज़ेदार कार्यान्वयन शामिल हैं।