Я использую круговой буфер для ввода данных в любой конец списка. После того, как я закончил, я хочу выровнять буфер так, чтобы первый элемент в списке находился в нуле нулевой позиции и может использоваться как обычный массив без каких-либо причудливых служебных указателей.
Итак, у меня есть круговой list с емкостью N, он имеет элементы N, начиная с произвольного индекса f.

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

