Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Последовательность (напоминает двусторонний стек — первый зашёл, первый вышел с обоих концов)Это называется дек (deque).
можно поподробней как добраться до конца очереди (или эмулировать это) за О(1)Никак. У очереди нет операции «обойти все элементы», есть только «положить в начало» и «забрать из конца».
data List a = Nil | Cons a (List a)
data [a] = [] | a : [a]
stack = 5 : 4 :3 : 2 : 1 : []
stack_ = Cons 5 (Cons 4 (Cons 3 (Cons 2 (Cons 1 Nil))))
stack1 = 6 : stack
stack1_ = Cons 6 : stack_
last [] = error "last"
last [x] = x
last (x:xs) = last xs
init [] = error "inits"
init [x] = []
init (x:xs) = x : inits xs
empty_queue = ([], [])
enqueue :: a -> ([a], [a]) -> ([a], [a])
dequeue :: ([a], [a]) -> (a, ([a], [a]))
-- O(1)
enqueue x (a, b) = (x:a, b)
-- O(n)
reversed list = reversed' list []
where
reversed' [] reversed = reversed
reversed' (x:xs) reversed = reversed' xs (x:reversed)
dequeue ([], []) = error "Dequeuing an empty queue"
-- O(1)
dequeue (a, x:b) = (x, (a, b))
-- O(n)
dequeue (a, []) = dequeue ([], reversed a)type Queue a = ([a], [a])
enqueue :: a -> Queue a -> Queue a
dequeue :: Queue a -> (a, Queue a)
Однако, для уменьшения информативности, требование ослаблено для пальчиковых деревьев, и, вместо этого, каждый префикс и суффикс содержат от 1 до 4 элементов.
Пальчиковые деревья (Часть 1. Представление)