环形缓冲区和循环链接列表有什么区别?
环形缓冲区用于圆形链接列表的目的是什么,反之亦然?
答案 0 :(得分:11)
环形缓冲区是一个连续的内存块,其中包含您的项目,当您到达目的地时,您将循环回到开头:
+----------------------+
| |
+-->| a | b | c | d |--+
=== increasing memory ===>
由于链表性质,循环链表根本不必是连续的,因此所有元素都可以分散在内存中。它只是遵循循环元素的属性:
+---------| d |<-----------------+
| |
+-->| a |------------->| b |--+ |
| |
+-----------------+ |
| |
+-->| c |------------+
=== increasing memory ===>
循环链表与链表在固定数组上的环形缓冲区相比具有相同的优势。它的大小可以不同,您可以插入和删除项目而不需要随机播放。
缺点也是类似的,如果您正在扩展或收缩列表,则不会进行O(1)阵列访问和增加工作。
当您知道其中允许的最大条目时,或者不介意限制它时,通常会使用环形缓冲区。例如,如果你有一个通信协议,当缓冲区变满时可以限制发送方,让接收方有时间赶上。
循环链接列表示例将是操作系统中的进程列表,您需要能够添加或删除进程,但不必关心列表的头部, 只有当前项目。