开发者社区> 问答> 正文

如何使用堆栈逆转Deque?

这是我的代码:

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分别是deque中的项目。如果我使用上面的代码来逆转DEQUE,那么它提供了错误的输出。如果我想印头版的话,它给我的是12件,而不是45件。我的代码的潜在错误是什么?注:用c++语言编写的代码。

展开
收起
aqal5zs3gkqgc 2019-12-06 20:30:23 1083 0
1 条回答
写回答
取消 提交回答
  • 这里要做的是,在第二个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}
    
    2019-12-06 20:31:07
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载