使用两个栈实现一个队列
来源:互联网 发布:跑跑卡丁车淘宝买号 编辑:程序博客网 时间:2024/05/19 06:19
栈是后进先出,而队列是先进先出,所以可以采用如下方法
在s1中压入数据之后再将s1中数据挨个弹出压入s2中,此时s2栈中数据的出栈顺序即为队列的头出的顺序
代码如下
class Solution{public: void Push(int data) { stack1.push(data); } void Pop() { assert(!stack1.empty() || !stack2.empty()); if (stack2.empty()) { while (!stack1.empty()) { stack2.push(stack1.top()); stack1.pop(); } } stack2.pop(); } int& Front() { assert(!stack1.empty() || !stack2.empty()); if (!stack2.empty()) { return stack2.top(); } while (!stack1.empty()) { stack2.push(stack1.top()); stack1.pop(); } return stack2.top(); } int& Back() { assert(!stack1.empty() || !stack2.empty()); while (!stack1.empty()) { return stack1.top(); } if (!stack2.empty()) { stack1.push(stack2.top()); stack2.pop; } return stack1.top(); }private: stack<int> stack1; stack<int> stack2;};
注意再向s2中压入数据的时候s2栈必须为空,且s1中的数据必须一次全部压入s2 中,出栈的顺序才能和队列一样
两个队列实现一个栈
也可以用两个队列来实现一个栈
将q1中的数据个数大于1的时候将它们挨个头出然后压入q2队列中,然后q1中的数据就是栈顶,将它pop出去之后在交换q1 q2中的数据 然后重复上述操作,最后就是 出栈的结果
代码如下
{ void Push(int data) { Data.push(data); } void pop() { assert(!Data.empty()); while (Data.size() > 1) { Help.push(Data.front()); Data.pop(); } Data.pop(); std::swap(Data, Help); } int& top() { assert(!Data.empty()); return Data.back(); }private: queue<int>Data; queue<int>Help;};
0 0
- 栈&队列--使用两个栈实现一个队列+使用两个队列实现一个栈
- 使用两个队列实现一个栈
- 使用两个队列实现一个栈
- 使用两个栈实现一个队列
- 使用两个栈实现一个队列
- 使用两个队列实现一个栈
- 数据结构-使用两个栈实现一个队列
- 使用两个队列实现一个栈
- 使用两个栈实现一个队列
- 使用两个队列实现一个栈
- 使用两个栈实现一个队列
- 使用两个栈实现一个队列
- 使用两个栈实现一个队列
- ~使用两个栈实现一个队列~
- ~使用两个队列实现一个栈~
- 使用两个栈实现一个队列
- 使用两个队列实现一个栈
- 使用两个栈实现一个队列
- codeforces 699D Fix a Tree
- MongoDB 3.2.7安装及用户角色配置
- TCP连接复用
- 汤晓鸥:百度并没有“作弊” 吴韧工作令人钦佩
- 联想G40 U盘装系统问题解决
- 使用两个栈实现一个队列
- lintcode balanced-binary-tree 平衡二叉树
- Maven+SpringMVC3+MyBatis+FreeMarker
- android基础(四)
- Java自然排序(个人总结-求赞)
- Eclipse 安装 activiti 插件 失败 An error occurred while collecting items to be installed
- mongoDB学习笔记 索引
- 微信内嵌浏览器sessionid丢失问题
- iOS开发零基础教程之证书、描述文件、App ID的解释