题目来源:https://leetcode.cn/problems/implement-stack-using-queues/description/
C++题解:用两个队列来实现。queue有front()和back()两个函数,所以找栈顶比较方便。
class MyStack {
public:
queue<int> queIn;
queue<int> queOut;
MyStack() {
}
void push(int x) {
queIn.push(x);
}
int pop() {
int n=0;
while(!queIn.empty()) {
queOut.push(queIn.front());
queIn.pop();
n++;
}
n = n-1;
while(n--) {
queIn.push(queOut.front());
queOut.pop();
}
int pNum = queOut.front();
queOut.pop();
return pNum;
}
int top() {
return queIn.back();
}
bool empty() {
if(queIn.empty()&&queOut.empty()) return true;
return false;
}
};
/**
* 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();
*/
C++题解2:使用一个队列,因为队列进出队的顺序不变,所以可以将出队的首元素放到队尾,直到遇到原队列的原队尾,可以使用queue.size()来计数。
class MyStack {
public:
queue<int> queIn;
MyStack() {
}
void push(int x) {
queIn.push(x);
}
int pop() {
int n = queIn.size() - 1;
while(n--) {
queIn.push(queIn.front());
queIn.pop();
}
int pNum = queIn.front();
queIn.pop();
return pNum;
}
int top() {
return queIn.back();
}
bool empty() {
if(queIn.empty()) return true;
return false;
}
};
/**
* 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();
*/