题目:MyQueue
要求:
正如标题所述,你需要使用两个栈来实现队列的一些操作。
队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。
pop和top方法都应该返回第一个元素的值。
样例:
比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2
算法要求:
仅使用两个栈来实现它,不使用任何其他数据结构,push,pop 和 top的复杂度都应该是均摊O(1)的
解题思路:
就是要理解,栈是先进后出,那么一个栈pop到另一个栈,那么另一个栈pop就相当于先进先出
算法如下:
class MyQueue {
public:
stack<int> stack1;
stack<int> stack2;
MyQueue() {
}
void push(int element) {
stack1.push(element);
}
int pop() {
if (stack2.empty()) {
lTor();
}
if (stack2.empty()) {
throw -1;
} else {
int temp = stack2.top();
stack2.pop();
return temp;
}
}
void lTor() {
while (!stack1.empty()) {
stack2.push(stack1.top());
stack1.pop();
}
}
int top() {
if (stack2.empty()) {
lTor();
}
if (stack2.empty()) {
throw -1;
} else {
return stack2.top();
}
}
};