| |||
|
|
Тут меня некоторое время назад спрашивали как написать эффективно кольцевой список на Haskell - ответ простой: Как пару из двух списков - то, что слева и то что справа от текущей позиции. Как реализовать вставку, удаление я думаю понятно Прокрутка заключается в перекидывании головного элемента из одного списка в другой, а в случае достижения конца - в инвертировании списка и свопе: newtype DList a = DList [a] [a] toLeft (DLlist (a:b) c) = DList b (a:c) toLeft [] c = DList (rev c) [] По причине ленивости языка сложность операций = O(1) |
||||||||||||||