# [232. Implement Queue using Stacks](https://leetcode.com/problems/implement-queue-using-stacks/description/) # 思路 用栈实现队列。 设置两个栈stk1和stk2,stk1中的元素是按照正常入栈顺序排的,stk2则是逆序,且同一时刻stk1和stk2至少一个为空。 若stk1不空,对队列入队的话直接对stk1入栈即可,否则要将stk2中所有元素pop到stk1中后再对stk1入栈。 若stk2不空,对队列出队的话直接对stk2出栈即可,否则要将stk1中所有元素pop到stk2中后再对stk2出栈。 # C++ ``` C++ class MyQueue { private: stackstk1; stackstk2; public: /** Initialize your data structure here. */ MyQueue() { } /** Push element x to the back of queue. */ void push(int x) { if(stk1.empty()){ int tmp; while(!stk2.empty()){ tmp = stk2.top(); stk2.pop(); stk1.push(tmp); } } stk1.push(x); } /** Removes the element from in front of queue and returns that element. */ int pop() { int tmp; if(stk2.empty()){ while(!stk1.empty()){ tmp = stk1.top(); stk1.pop(); stk2.push(tmp); } } tmp = stk2.top(); stk2.pop(); return tmp; } /** Get the front element. */ int peek() { if(stk2.empty()){ int tmp; while(!stk1.empty()){ tmp = stk1.top(); stk1.pop(); stk2.push(tmp); } } return stk2.top(); } /** Returns whether the queue is empty. */ bool empty() { return stk1.empty() && stk2.empty(); } }; ```