Стеки из Deques
Стеки - это структуры с первым и последним выходом.Deques позволяет вам толкать / выталкивать как спереди, так и сзади.Если вы отслеживаете количество элементов, которые вы сохранили в передней / задней части, то вы можете использовать переднюю часть как одну стопку, а заднюю часть как другую, возвращая элементы NULL, если ваши счетчики обнуляются.
Почему вы бы это сделали?Кто знает, но читайте дальше.
Очереди из стеков
Вы можете реализовать очередь так, чтобы она имела O (1) амортизированное время привсе его операции с использованием двух стеков.Когда вы помещаете предметы в очередь, поместите их в одну стопку.Когда вам нужно вытянуть вещи из очереди, опустошите этот стек в другой стек и вытолкните из верхней части этого стека (заполняя другой стек новыми поступающими предметами).
Почему хотите ли вы сделать это?
Потому что, это - это , грубо говоря, как вы делаете очередь.Структуры данных должны быть реализованы как-то.В компьютере вы выделяете память, начиная с базового адреса и строя наружу.Таким образом, стек является очень естественной структурой данных, потому что все, что вам нужно сделать, это отслеживать одно положительное смещение, чтобы знать, где находится верх вашего стека.
Непосредственно реализовать очередь сложнее ...Вы добавляете предметы к одному концу, но вытягиваете их с другого.Два стека дают вам возможность сделать это.
Но почему 3 очереди?
Поскольку этот алгоритм (если он существует) обеспечивает постоянную границу длявременная сложность операции очереди.С нашим 2-стековым решением в среднем каждый элемент занимает O (1) времени, но, если у нас действительно большой стек, время от времени происходит операция, которая занимает долго время.Пока это происходит, происходит авария, ракета взрывается или пациент умирает.
Вам не нужен грубый алгоритм, который дает непредсказуемую производительность.
Вам нужны гарантии.
В этом ответе StackOverflow объясняется, что решение с 3 стеками неизвестно, но существует решение с 6 стеками.
Почему стеки от запросов
Вернемся к первому вопросу.Как мы уже видели, есть веские причины, чтобы иметь возможность строить очереди из стеков.Для компьютера это естественный способ построения сложной структуры данных из простой.Это может даже дать нам гарантии производительности.
Стеки из Dequeues не кажутся мне практичными в работе с компьютером.Но информатика не о компьютерах;речь идет о поиске эффективных алгоритмических решений проблем.Может быть, вы храните материал на разнонаправленном ленточном конвейере на заводе.Вы можете запрограммировать ремень так, чтобы он действовал как деку, и используйте деку для создания стеков.В этом контексте вопрос имеет больше смысла.