20200630-leetcode每日一题-利用两个栈实现队列

    技术2022-07-10  158

    题目

    题目思路:

    我们知道栈和队列的核心思想是不同的,一个是先进先出(队列),一个是先进后出(栈),这次看到题也让我思考了一下,如何使用多个栈来建立一个队列。 思路要点:将栈倒序输出。

    我们如果可以想到将栈倒序输出,那么解出这道题就是easy模式啦~,两个函数设计如下

    插入的时候我们就简单的对栈进行插入操作即可删除的时候呢,加入我们实际想要删除的是栈A的栈底元素,我们设计一个B栈,我们依次将栈A的元素放入B,这时候栈B的栈顶元素就是我们想要删除的元素,弹出即可,将弹出后的栈B中的元素再依次放入栈A即可。这样我们就可以在 O(n) 的时间复杂度内用两个栈来模拟一个队列的功能啦!

    代码 (C++)

    class CQueue { public: stack<int> a; stack<int> b; CQueue() { } void appendTail(int value) { a.push(value); } int deleteHead() { //a不空.将a的所有元素放到b,将b的头部元素弹出后,再将b重新放回a while(!a.empty()){ b.push(a.top()); a.pop(); } if(b.empty()) return -1; int ret=b.top(); b.pop(); while(!b.empty()){ a.push(b.top()); b.pop(); } return ret; } }; /** * Your CQueue object will be instantiated and called as such: * CQueue* obj = new CQueue(); * obj->appendTail(value); * int param_2 = obj->deleteHead(); */
    Processed: 0.029, SQL: 9