232. 用栈实现队列

232. 用栈实现队列

力扣题目链接
1:需要两个栈来实现输入栈以及输出栈
2:push数据的时候数据放到输入栈即可。
3:pop时候,输出栈如果为空,就把进栈数据全部导入进去,在从出栈弹出数据,如果输出栈不为空,则直接从出栈中弹出数据即可。
4:判空,如果输入栈与输出栈都为空说明模拟队列为空。
方法一:主要写pop,peek复用pop

class MyQueue {

public:
    stack<int> stIn;
    stack<int> stOut;

    MyQueue() {

  

    }

    void push(int x) {
        stIn.push(x);
    }

    int pop() {

        if(stOut.empty())
        {

            while(!stIn.empty()){

                stOut.push(stIn.top());

                stIn.pop();
            }
        }

        int restule = stOut.top();

        stOut.pop();

        return restule;

    }

    int peek() {

        int restule = this->pop();

        stOut.push(restule);

        return restule;

    }

    bool empty() {
	    return stIn.empty() && stOut.empty();
    }
};
/**

 * Your MyQueue object will be instantiated and called as such:

 * MyQueue* obj = new MyQueue();

 * obj->push(x);

 * int param_2 = obj->pop();

 * int param_3 = obj->peek();

 * bool param_4 = obj->empty();

 */

方法二:主要写peek,pop复用pop

class MyQueue {

private:

    stack<int> stIn;

    stack<int> stOut;

public:

    MyQueue() {

  

    }

    //添加元素到队尾,只要加入到输入栈即可

    void push(int x) {

        stIn.push(x);

    }

    //删除头元素并返回

    int pop() {

        this->peek(); //先调用peek保证输出栈不为空

        int result = stOut.top();

        stOut.pop();  

        return result;

    }

    int peek() {

        int result = 0;

        if(!stOut.empty()){   //如果输出栈不为空,直接在输出栈找top即可

          result = stOut.top();

        }

        else{ //如果输出栈为空,需要先把输入栈全部导入到输出栈,再取top才可

            while(!stIn.empty()){

                int data = stIn.top();

                stOut.push(data);

                stIn.pop();

            }

          result = stOut.top();

        }

        return result;

    }

    bool empty() {

        return stIn.empty() && stOut.empty();

    }

};

  

/**

 * Your MyQueue object will be instantiated and called as such:

 * MyQueue* obj = new MyQueue();

 * obj->push(x);

 * int param_2 = obj->pop();

 * int param_3 = obj->peek();

 * bool param_4 = obj->empty();

 */
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值