Implement Queue with Two Stacks
1. Two Stacks Tricks
class Queue{
    public:
        shared_ptr<Stack>  st1;
        shared_ptr<Stack>  st2;
        Queue(int n){
            shared_ptr<Stack> p1(new Stack(n)); 
            st1 = p1;
            shared_ptr<Stack> p2(new Stack(n)); 
            st2 = p2;
        }
    public:
        char dequeue(){
            char ch;
            if(st1->size() > 0){
                while(!st1->isEmpty()){
                    st2->push(st1->pop());
                }

                ch = st2->pop();
                while(!st2->isEmpty()){
                    st1->push(st2->pop());
                }
            }
            return ch;
        }
        void enqueue(int n){
            st1->push(n);
        }
        bool isEmpty(){
            return st1->isEmpty();
        }
};