leetcode232_用栈实现队列

1、题目

 

 2、分析

   C++存在这样几种容器,vector,list, deque

   vector的优点是线性空间,随机存取的效率高,但是插入删除的效率不高。

   list使用双向链表实现,空间不连续,但是插入删除的效率高,随机存取的效率不高。

   deque综合了两者的优点,使用线性空间,随机存取的效率高,可以实现头尾节点的插入删除,但是实现结构复杂。

   stack和queue属于容器适配器,都是使用上面的容器来实现底层逻辑,栈一般默认的是使用deque来实现底层逻辑,当然我们也可以自己修改。

    今天要实现的功能就是如何用stack实现quene。而且只使用push(),pop(),top(), empty()等几个函数。

    具体分析参考链接:https://leetcode-cn.com/problems/implement-queue-using-stacks/solution/tu-jie-guan-fang-tui-jian-ti-jie-yong-zh-4hru/

   具体需要注意的是,在stack的操作里面,pop操作直接删除,是不会反悔元素的。

3、代码

class MyQueue {
public:
    stack<int> stack_in;
    stack<int> stack_out;
    MyQueue() {

    }
    
    void push(int x) {
        stack_in.push(x);
    }
    
    int pop() {
        //stack out为空的时候
        if(stack_out.empty()){
            while(!stack_in.empty()){
                int pre = stack_in.top();
                stack_in.pop();
                stack_out.push(pre);
            }
        }
        int pre = stack_out.top();
        stack_out.pop();
        return pre;

    }
    
    int peek() {
        int outcome = this->pop();
        stack_out.push(outcome);
        return outcome;
    }
    
    bool empty() {
        return (stack_in.empty() && stack_out.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();
 */

 

posted @ 2021-12-11 17:46  星光夜  阅读(34)  评论(0编辑  收藏  举报