题目
思路和代码
class MyStack {
public:
queue q1;
queue q2;
MyStack() {
}
//1 2
//元素是通过队列出来的,在队列2里元素依旧是先进先出的。而栈是需要后进的先出,那么2进队列前先让1出来。 就成了2在1前面。(这个固定了) 然后3再进来,就把前面部分继续先挪到后一个队列
//队列的特点是,固定部分元素进出顺序就不变了。12出在q2里也是12 回来依旧是12
//所以push的时候 前面挪出来,新的先进去 那就成了栈的特点了,后续pop就直接操作
void push(int x) {
// while(!q1.empty())
// {
// q2.push(q1.front())
// q1.pop();
// }//q1弹光,x进q2;再回来。。。好像有点麻烦 多的元素移动了两次。。。不如就直接x先进2 之后的再后进,再回到q1
q2.push(x);//直接2先进去
while(!q1.empty())//假设现在之后1 要进2 那么2在1前面是ok的 还是要有主管设为1管 把ok的放回已经空了的1管/more 假设3进 那么3入2 3的位置就是ok的了,正确的21也进 ok
{
q2.push(q1.front());//把1的放进去
q1.pop();
}1``
//所有正确的元素再回到1管
swap(q1,q2);
}
int pop() {
int val = q1.front();
q1.pop();
return val;
}
int top() {
return q1.front();
}
bool empty() {
return q1.empty();
}
};