Так что решение было не так уж сложно.Постоянный стек может быть легко реализован с использованием связанного списка, что приводит к сложности O (1) для push () и pop ().Что касается очереди, то, похоже, нет большого выбора, кроме как принять сложность O (n) либо очереди, либо очереди.В таком случае я могу просто использовать один стек в качестве входного (enqueue), а другой - в качестве optput (dequeue).Это будет просто вопрос обращения стека ввода и замены вывода, когда вывод станет пустым - вероятно, лучшая идея - выполнить dequeue ().Это может быть не самый элегантный подход, мне может понадобиться переосмыслить это для большего количества элементов (возможно, добавить очередь / дерево стеков, чтобы ограничить реверс), но для моих текущих потребностей этого должно быть достаточно.Спасибо всем за ваши предложения.
Реализация постоянных стеков - https://github.com/nekomatic/types/blob/graph/src/main/kotlin/com/nekomatic/types/Stack.kt
Реализация постоянных очередей - https://github.com/nekomatic/types/blob/graph/src/main/kotlin/com/nekomatic/types/Queue.kt