class MyStack { public: /** Initialize your data structure here. */ MyStack() { } /** Push element x onto stack. */ void push(int x) { //添加一个临时队列 std::queue<int> temp_queue; temp_queue.push(x); //只要队列数据不为空,就一直压入临时队列 while(!_data.empty()){ temp_queue.push(_data.front()); _data.pop(); } //只要临时队列不为空,就一直压入主队列 while(!temp_queue.empty()){ _data.push(temp_queue.front()); temp_queue.pop(); } } /** Removes the element on top of the stack and returns that element. */ int pop() { //直接返回队列的头部元素 int x = _data.front(); //弹出队列 _data.pop(); return x; } /** Get the top element. */ int top() { //返回队列的头部元素 return _data.front(); } /** Returns whether the stack is empty. */ bool empty() { //可以直接所使用的队列的empty()方法 return _data.empty(); } private: std::queue<int> _data; }; /** * Your MyStack object will be instantiated and called as such: * MyStack* obj = new MyStack(); * obj->push(x); * int param_2 = obj->pop(); * int param_3 = obj->top(); * bool param_4 = obj->empty(); */
如图所示,通过增加一个新的队列来实现这个
我们是通过修改push()方法和pop()方法来实现的,先让要入栈的元素5放入一个临时队列中,然后把主队列中的元素4、3、2、1全部依次进入临时队列,最后再把临时队列中的元素5、4、3、2、1全部push入主队列当中,这样子就实现了要入栈的元素5是最后进入的,如果要出来的话却是最先出来的,达到了“后入先出”的要求