2020-05-09
1.题目描述
用队列实现栈
2.题解
使用两个队列,一个用来进行入栈出栈操作,一个用来作为中转。
入栈:直接进入到队列1中
出栈:如果队列1为空,就把队列2中的所有元素加入进来。然后将队列1中的所有元素加入到队列2中,到最后
一个元素的时候,输出即可。
3.代码
class MyStack {
public:
/** Initialize your data structure here. */
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
myqueue1.push(x);
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
if (myqueue1.empty()){
while(!myqueue2.empty()){
myqueue1.push(myqueue2.front());
myqueue2.pop();
}
}
while(myqueue1.size()>1){
myqueue2.push(myqueue1.front());
myqueue1.pop();
}
int t=myqueue1.front();
myqueue1.pop();
return t;
}
/** Get the top element. */
int top() {
if (myqueue1.empty()){
while(!myqueue2.empty()){
myqueue1.push(myqueue2.front());
myqueue2.pop();
}
}
while(myqueue1.size()>1){
myqueue2.push(myqueue1.front());
myqueue1.pop();
}
return myqueue1.front();
}
/** Returns whether the stack is empty. */
bool empty() {
if (myqueue1.empty()&&myqueue2.empty( )) return true;
return false;
}
queue<int> myqueue1,myqueue2;
};
/**
* 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();
*/