[原创] 用两个queue实现stack的功能
2016-03-23 22:04
387 查看
#include <iostream> #include <queue> using namespace std; template <class T> class doubleQueueToStack { private: queue<T> queueA; queue<T> queueB; bool flag = true; // flag True, queueA is active public: void push(T elemet); void pop(); }; template <class T> void doubleQueueToStack<T>::push(T element){ if(flag == true){ queueA.push(element); cout <<element << " push to queueA" <<endl; } else{ queueB.push(element); cout <<element << " push to queueB" <<endl; } } template <class T> void doubleQueueToStack<T>::pop() { if(doubleQueueToStack::flag==true){ if(doubleQueueToStack::queueA.empty()){ cout << "no element to pop....." << endl; return; } int n= doubleQueueToStack::queueA.size(); for(int i = 0; i<n-1; i++){ ///(##a) doubleQueueToStack::queueB.push(queueA.front()); doubleQueueToStack::queueA.pop(); } cout <<"pop: " << doubleQueueToStack::queueA.front() <<endl; doubleQueueToStack::queueA.pop(); doubleQueueToStack::flag = false; } else{ if(doubleQueueToStack::queueB.empty()){ cout << "no element to pop....." << endl; return; } int n= doubleQueueToStack::queueB.size(); for(int i = 0; i < n-1; i++){ ///(##b) //cout << doubleQueueToStack::queueB.front() << endl; doubleQueueToStack::queueA.push(doubleQueueToStack::queueB.front()); doubleQueueToStack::queueB.pop(); } cout << "pop : " << doubleQueueToStack::queueB.front() <<endl; doubleQueueToStack::queueB.pop(); doubleQueueToStack::flag = true; } } int main() { doubleQueueToStack<double> queueDD; queueDD.push(11); queueDD.push(22); queueDD.push(33); queueDD.pop(); queueDD.push(44); queueDD.pop(); queueDD.pop(); queueDD.pop(); queueDD.pop(); return 0; }
注意,语句(a)(b)处不能用以下语句代替:
for(int i = 0; i<doubleQueueToStack::queueA.size()-1; i++){ ////!!!!! 错误!!!!! doubleQueueToStack::queueB.push(queueA.front()); doubleQueueToStack::queueA.pop(); }
queueA.size是unsigned类型(size_type), 直接进行运算会出问题,
上述语句执行结果,比正确结果少一次queueA.pop。
相关文章推荐
- 深入分析Parquet列式存储格式
- 手动型Segue
- prepareForSegue
- ExtJs之Ext.core.DomQuery
- Web前端:简洁美观的HTML图片上传UI框架
- iOSDay14之OC NSNumber + NSValue
- iOS UILable 高度自适应
- iOS UILabel 设置行高
- ios UITextField 输入框,几位数字后面加什么字符
- Dictionary及KeyValuePair使用
- poj 2533 Longest Ordered Subsequence 经典DP
- 《NumPy Beginner's Guide》笔记Chapter4
- iOS边练边学--UIPickerView和UIDatePicker的简单使用
- EasyuiAPI:菜单
- poj2533 Longest Ordered Subsequence(最长上升子序列)
- EasyuiAPI:布局
- EasyuiAPI:基础
- 优化UITableViewCell高度计算的那些事
- Integer valueOf
- [原创] 用两个stack实现queue的功能