用两个队列实现栈

  思路:每次push的时候,选择非空的队列push,如果两个队列都空,任选一个;pop的时候,将队列前n-1个元素转移到另一个队列,再pop第n个(最后一个)元素。每次操作后都保持至少有一个队列是空的。

#include<iostream>
#include<queue>
using namespace std;
class Stack
{
public:
    void push(int elem)
    {
        if(que1.size()!=0)
        {
            que1.push(elem);
        }else{
            que2.push(elem);
        }
    }
    int pop()
    {
        if(que1.size()!=0)
        {
            while(que1.size()>1)
            {
                int tmp=que1.front();
                que1.pop();
                que2.push(tmp);
            }
            int tmp=que1.front();
            que1.pop();
            return tmp;
        }else{
            while(que2.size()>1)
            {
                int tmp=que2.front();
                que2.pop();
                que1.push(tmp);
            }
            int tmp=que2.front();
            que2.pop();
            return tmp;
        }
    }
private:
    queue<int> que1;
    queue<int> que2;
};

 

posted @ 2017-12-19 17:35  jeysin  阅读(80)  评论(0编辑  收藏  举报