环形缓冲区和循环链接列表有什么区别?

环形缓冲区不能为环形链接表服务的目的是什么,反之亦然?

最佳答案

环形缓冲区是一个连续的内存块,其中包含您的项,到达终点时,您循环回到起点:

+----------------------+
|                      |
+-->| a | b | c | d |--+

=== increasing memory ===>


由于链表的性质,圆形链表根本不必是连续的,因此所有元素都可以分散在内存中。它只是服从循环元素的属性:

+---------| d |<-----------------+
|                                |
+-->| a |------------->| b |--+  |
                              |  |
            +-----------------+  |
            |                    |
            +-->| c |------------+

=== increasing memory ===>


循环链表在环形缓冲区上的优势与链表在固定数组上的优势相同。它的大小可能有所不同,您可以插入和删除项目而无需重新排列。

缺点也类似,如果要扩展或收缩列表,则无法访问O(1)数组,并且工作量也会增加。

当您知道其中允许的最大条目数时,或者不介意对其进行限制时,通常会使用环形缓冲区。例如,如果您有一个通信协议,当缓冲区已满时,该协议可以限制发送方,从而使接收方有时间赶上。

循环链接列表的示例是操作系统中的进程列表,您需要在其中添加或删除进程,但您不必关心列表的开头,而只关心当前项。

08-16 20:12