如何使用堆栈反转双端队列?
How to reverse a Deque using stack?
这是我的代码:-
stack <int> intStack;
while (!adaqueue.empty())
{
intStack.push(adaqueue.front());
adaqueue.pop_front();
}
while (!intStack.empty())
{
adaqueue.push_front(intStack.top());
intStack.pop();
}
它没有给出正确的输出。例如,12 和 45 分别是双端队列中的项目。如果我使用上面的代码来反转双端队列,它会给出错误的输出。如果我尝试打印前面的项目,它会给我 12 而不是 45。我的代码可能有什么潜在错误?
N.B。 c++语言代码。
你想在这里做的是在第二个while循环中你想从堆栈中删除顶部,然后将它添加到队列的后面。这样你就可以颠倒顺序。试着在纸上画出草图。这将有助于形象化。
队列初始状态(1为最前面):
{1,2,3,4,5}
入栈后(5为栈顶):
{5,4,3,2,1}
然后从栈顶取出并添加到队列的后面,我们保留相同的顺序(5):
S {5,4,3,2,1}
Q {}
S {4,3,2,1}
Q {5}
S {3,2,1}
Q {5,4}
S {2,1}
Q {5,4,3}
等等。最后我们把队列倒过来了:
S {}
Q {5,4,3,2,1}
这是我的代码:-
stack <int> intStack;
while (!adaqueue.empty())
{
intStack.push(adaqueue.front());
adaqueue.pop_front();
}
while (!intStack.empty())
{
adaqueue.push_front(intStack.top());
intStack.pop();
}
它没有给出正确的输出。例如,12 和 45 分别是双端队列中的项目。如果我使用上面的代码来反转双端队列,它会给出错误的输出。如果我尝试打印前面的项目,它会给我 12 而不是 45。我的代码可能有什么潜在错误? N.B。 c++语言代码。
你想在这里做的是在第二个while循环中你想从堆栈中删除顶部,然后将它添加到队列的后面。这样你就可以颠倒顺序。试着在纸上画出草图。这将有助于形象化。
队列初始状态(1为最前面):
{1,2,3,4,5}
入栈后(5为栈顶):
{5,4,3,2,1}
然后从栈顶取出并添加到队列的后面,我们保留相同的顺序(5):
S {5,4,3,2,1}
Q {}
S {4,3,2,1}
Q {5}
S {3,2,1}
Q {5,4}
S {2,1}
Q {5,4,3}
等等。最后我们把队列倒过来了:
S {}
Q {5,4,3,2,1}