В чем разница между кольцевым буфером и циклическим связанным списком?

В чем разница между кольцевым буфером и циклическим связанным списком?

Какой цели служит кольцевой буфер, чего не может сделать круговой связанный список, или наоборот?


person user366312    schedule 20.08.2015    source источник


Ответы (1)


Кольцевой буфер — это единый непрерывный блок памяти, который содержит ваши элементы, и когда вы достигаете конца, вы возвращаетесь к началу:

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

=== increasing memory ===>

Циклический связанный список из-за природы связанного списка вообще не должен быть непрерывным, поэтому все элементы могут быть разбросаны по памяти. Он просто подчиняется тому свойству, что элементы цикла:

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

=== increasing memory ===>

Циклический связанный список имеет то же преимущество перед кольцевым буфером, что и связный список перед фиксированным массивом. Он может различаться по размеру, и вы можете вставлять и удалять элементы без перетасовки.

Недостатки также аналогичны: нет доступа к массиву O (1) и увеличивается объем работы, если вы расширяете или сжимаете список.

Кольцевой буфер, как правило, используется, когда вы знаете максимально допустимое количество записей в нем или не возражаете против его ограничения. Например, если у вас есть протокол связи, который может блокировать передающую сторону, когда буфер заполняется, давая принимающей стороне время наверстать упущенное.

Примером кругового связанного списка может быть список процессов в операционной системе, где вам нужно иметь возможность добавлять или удалять процессы, но вам не заботится заголовок списка, а только текущий элемент.

person paxdiablo    schedule 20.08.2015
comment
ХОРОШО. Это было с точки зрения реализации. В чем разница с точки зрения использования? - person user366312; 20.08.2015
comment
@anonymous, это полностью зависит от того, как вы его используете :-) Если вы просто кладете хвост и попадаете в голову, не должно быть никакой разницы в использовании. Добавлю еще несколько заметок. - person paxdiablo; 20.08.2015