一个循环缓冲区是一个固定大小的数组,被视为其两端连接成一个环。两个索引——head(读)和 tail(写)——使用模运算向前推进并环绕,提供一个 O(1) FIFO 队列,创建后无需再分配。
环绕的工作原理
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)
代码
python
:
():
.buf = []*n
.head = .tail = .size =
.cap = n
():
.size == .cap: Exception()
.buf[.tail] = x
.tail = (.tail + ) % .cap
.size +=
():
x = .buf[.head]
.head = (.head + ) % .cap
.size -=
x
