Buffer sirkular iku array ukuran tetep sing diperlakoni kaya-kaya ujung-ujunge digabung dadi ring. Loro indeks — head (maca) lan tail (nulis) — maju lan ngubengi nganggo aritmetika modulo, menehi antrian FIFO O(1) tanpa alokasi sawise dibuat.
Cara kerja ngubengi
text
capacity 5, after writing A,B,C,D and reading A,B:
index: 0 1 2 3 4
[ . ][ . ][ C ][ D ][ . ]
head^ tail^ (tail wraps to 0 next write)
Code
python
class RingBuffer:
def __init__(self, n):
self.buf = [None]*n
self.head = self.tail = self.size = 0
self.cap = n
def enqueue(self, x): # O(1)
if self.size == self.cap: raise Exception("full")
self.buf[self.tail] = x
self.tail = (self.tail + 1) % self.cap # wrap
self.size += 1
def dequeue(self): # O(1)
x = self.buf[self.head]
self.head = (self.head + 1) % self.cap # wrap
self.size -= 1
return x
| Operasi | Wektu |
|---|---|
| enqueue / dequeue | O(1) |
| spasi | O(n) tetep |
Kapan nggunakake
- Buffer streaming / audio / video — mbatas, throughput tetep.
- Pipeline produser–konsumen karo backpressure.
- Logging N acara paling anyar (lebokake kang paling lawas).
Mengapa iku penting
Buffer ring nyediakake prilaku FIFO sing bisa diprediksi lan tanpa alokasi, sing penting ing sistem real-time lan embedded nang pas alokasi dinamis pancet utawa berbahaya.
Ukuran mbatase uga bisa dadi backpressure alami, nyegah produser cepet saka ngasikaté memori.
