(C++)由两个栈组成的队列

说明:编程菜鸟一枚,学习左程云老师的《程序员代码面试指南》过程中将书中的例子改写成C++实现

题目
编写一个类,用两个栈来实现队列,支持队列的基本操作(add,poll,peak).
实现
两个栈,一个作为压入栈,压入数据时只往这个栈压入,记为stackPush;另一个栈只作为弹出栈,在弹出数据时只从这个栈弹出,记为stackPop。操作必须注意以下两点:
1.如果stackPush要往stackPop压入数据,那么必须一次性把stackPush中数据全部压入。
2.如果stackPop不为空,stackPush绝对不能向stackPop压入数据。
代码

template <class T>
class twoStacksQueue{
    public:
        void add(int num){
            stackpush.push(num);
        };
        int poll(){
            if(stackpush.empty() && stackpop.empty()){
                cout<<"The queue is empty"<<endl;
                }
            else if(stackpop.empty()){
                while(!stackpush.empty()){
                    stackpop.push(stackpush.top());
                    stackpush.pop();
                    }
                }
            return stackpop.pop();
        };
        int peek(){
            if(stackpush.empty() && stackpop.empty()){
                cout<<"The queue is empty"<<endl;
                }
            else if(stackpop.empty()){
                while(!stackpush.empty()){
                    stackpop.push(stackpush.top());
                    stackpush.pop();
                    }
                }
            return stackpop.top();
        };
    private:
        stack<int> stackpush;
        stack<int> stackpop;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章