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

时间:2015-08-20 04:44:47

标签: circular-buffer circular-list

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

环形缓冲区用于圆形链接列表的目的是什么,反之亦然?

1 个答案:

答案 0 :(得分:11)

环形缓冲区是一个连续的内存块,其中包含您的项目,当您到达目的地时,您将循环回到开头:

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

=== increasing memory ===>

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

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

=== increasing memory ===>

循环链表与链表在固定数组上的环形缓冲区相比具有相同的优势。它的大小可以不同,您可以插入和删除项目而不需要随机播放。

缺点也是类似的,如果您正在扩展或收缩列表,则不会进行O(1)阵列访问和增加工作。

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

循环链接列表示例将是操作系统中的进程列表,您需要能够添加或删除进程,但不必关心列表的头部, 只有当前项目。

相关问题