(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;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章