输入:无
要求:请仅使用两个栈实现一个队列,队列应该支持一般队列的所有操作:push、pop、peek、empty。
输出:队列类 MyQueue
思路:队列是先进先出(FIFO),而栈是后进先出(LIFO)。利用两个栈,可以通过“倒腾”数据来实现 FIFO 顺序。
我写的非常简单粗暴,可以优化写法,提前准备好出栈数据,不必次次倒腾。
class MyQueue {
private:
stack<int> st1;
stack<int> st2;
public:
MyQueue() {
}
void push(int x) {
st1.push(x);
}
int pop() {
int tmp;
while (!st1.empty()) {
st2.push(st1.top());
st1.pop();
}
tmp = st2.top();
st2.pop();
while (!st2.empty()) {
st1.push(st2.top());
st2.pop();
}
return tmp;
}
int peek() {
int tmp;
while (!st1.empty()) {
st2.push(st1.top());
st1.pop();
}
tmp = st2.top();
while (!st2.empty()) {
st1.push(st2.top());
st2.pop();
}
return tmp;
}
bool empty() {
return st1.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();
*/
1786

被折叠的 条评论
为什么被折叠?



