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