两个队列实现一个栈
2016-04-13 17:16
323 查看
两个队列实现一个栈
思路:模拟栈中定义两个队列q1,q2。
push:模拟栈push数据,在q1中push,调用队列q1的push方法
pop:模拟栈pop数据,将q1的数据留出队尾的数据,其余的push到q2中,pop掉q1中剩下的最后一个元素。之后将q2的数据在push到q1中。(需要pop多个数据,需要写循环).
打印:需要像pop一样循环打印
代码:
思路:模拟栈中定义两个队列q1,q2。
push:模拟栈push数据,在q1中push,调用队列q1的push方法
pop:模拟栈pop数据,将q1的数据留出队尾的数据,其余的push到q2中,pop掉q1中剩下的最后一个元素。之后将q2的数据在push到q1中。(需要pop多个数据,需要写循环).
打印:需要像pop一样循环打印
代码:
class Stack { public: void push(const int& x) { _qu1.push(x); } void pop() { if (_qu1.empty()) { cout << "empty stack!"<<endl; return; } while (_qu1.size() - 1) { _qu2.push(_qu1.front()); _qu1.pop(); } _qu1.pop(); if (_qu1.empty()) { while (!_qu2.empty()) { _qu1.push(_qu2.front()); _qu2.pop(); } } else { assert(false); } } void print() { queue<int> tmp1 = _qu1; queue<int> tmp2= _qu2; while (tmp1.size()) { while (tmp1.size() - 1) { tmp2.push(tmp1.front()); tmp1.pop(); } cout << tmp1.front() << "->"; tmp1.pop(); if (tmp1.empty()) { while (!tmp2.empty()) { tmp1.push(tmp2.front()); tmp2.pop(); } } else { assert(false); } } cout << endl; } private: queue<int> _qu1; queue<int> _qu2; };[b][b]以上就是本人在学习过程中的一些经验总结。当然,本人能力有限,难免会有纰漏,希望大家可以指正。[/b][/b]
相关文章推荐
- 用PS实现纹理浮雕效果代码
- 用vbs实现cmd功能的代码
- 用双网卡实现三机互联
- C#中实现判断某个类是否实现了某个接口
- DL.DT.DD实现左右的布局简单例子第1/2页
- 用PHP实现文件上传
- 无限级别菜单的实现
- 留言板翻页的实现详解
- WinForm中的登录实现
- Jquery promise实现一张一张加载图片
- JavaScript iframe数据共享接口实现方法
- ibatis简单实现与配置
- jsp实现购物程序
- MySQL 查询结果取交集的实现方法
- 探讨:用两个栈实现一个队列(我作为面试官的小结)
- 文件上传的实现
- 实现“上一页”和“下一页按钮
- 基于C语言实现的扫雷游戏代码
- 基于C语言实现的迷宫游戏代码
- 图文演示Flash+ASP实现用户登录/注册程序第1/2页