Я использую круговой буфер для ввода данных в любой конец списка. После того, как я закончил, я хочу выровнять буфер так, чтобы первый элемент в списке находился в нуле нулевой позиции и может использоваться как обычный массив без каких-либо причудливых служебных указателей.
Итак, у меня есть круговой list
с емкостью N
, он имеет элементы N
, начиная с произвольного индекса f
.
Какой самый быстрый способ сдвинуть/повернуть все элементы таким образом, чтобы f = 0
?
Ловушка: я хочу сделать это на месте (хотя, конечно, понадобятся некоторые регистры/временные файлы). Буфер может быть полным (n = N
), [EDIT], но я также заинтересован в эффективном рассмотрении случаев, когда он почти пуст.