【数据结构】用两个队列实现一个栈

题目描述:
In this assignment, you need to complete Class Stack’s declaration and definition with Template. The different thing is that the Stack is implemented by two queues.
And you need to define a print function to print the content in the Stack from top to bottom. The format is: every element is followed by a blank space and an endl in the end.

大概意思就是要你利用两个队列实现一个栈的功能。
大概思路有两个:

思路一:
1、进栈:先把元素push进空的队列,如果两者都是空的,则随意。
2、在把另一个非空的队列里面的元素一个个按顺序拿出来,push到前者中。
3、这样就变成后者是空的了,可以用来装下一个进栈的元素。
4、出栈:直接将那个非空的队列里面的元素front()出来再pop()掉就可以。

思路二:
1、进栈:把元素push进非空的队列,如果两者都是空的,则随意。
2、出栈:把非空队列里面的前n-1个元素push到空队列里面,再把最后一个元素拿出来即可。
3、循环以上步骤,即可得到实现目的。
分析:虽然两个思路在理论上都行得通,但是第一个思路的时间复杂度太高,实现效率不高,所以下面贴出来的是第二个思路的代码:

#include "queue"
#include "iostream"
using namespace std;
template <typename T>
class Stack {
 public:
    Stack() {
        count = 0;
    }
    ~Stack() {}
    void push(const T & data) {
        if (!q2.empty()) {
            q2.push(data);
        } else {
            q1.push(data);
        }
        count&#
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值