【栈队列】两个栈实现一个队列、两个队列实现一个栈
来源:互联网 发布:贵州广电网络怎么上网 编辑:程序博客网 时间:2024/06/06 19:50
两个栈实现一个队列
分析问题:栈的特性是后进先出,而队列的特性是先进先出,可以这样考虑,用其中一个栈作为辅助栈,栈s1,作为入队的栈,栈s2作为出队的辅助栈。
方法1、
入队:直接压入栈s1中,
出队:如果s1不为空的话,先把s1中的元素全部弹出压入s2中,s1为空的话,直接弹出s2的栈顶,注意:s1和s2都为空的话,那么队列为空。
template<class T>class Queue{public: Queue(){} void Push(T data) { s1.push(data); } void Pop() { if(s1.empty()&& s2.empty()) return ; else if(!s1.empty()) { //将s1的内容弹出压入s2中 s1Tos2(); //弹出s2的栈顶 s2.pop(); } else//s1为空,s2不为空 { //直接弹出s2栈顶 s2.pop(); } }private: //将s1的内容弹出压入s2中 void s1Tos2() { while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } }private: statck<T> s1;//入队缓冲区 statck<T> s2;//出队缓冲区};
上述思路的优化???这是在网上看到的,我感觉不友好
就是上述出队的时候,将栈s1的内容弹出压入s2的时候,可以剩余1个,直接返回,这样可以减少一个s2压栈操作。
方法2、
其实就是方法1的变种
始终维护s1作为存储空间,以s2作为临时缓冲区,
入队时,将元素压入s1。
出队时,将s1的元素逐个“倒入”(弹出并压入)s2,将s2的顶元素弹出作为出队元素,之后再将s2剩下的元素逐个“倒回”s1。
方法3、
入队时,将元素压入s1。
出队时,判断s2是否为空,如不为空,则直接弹出顶元素;如为空,则将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队。
其实上述方法都大同小异,都是基于一个思路。
两个队列实现一个栈
分析:两个队列,一个队列作为入栈的存储区,另一个队列作为中转站,但是不专职指定,那个队列为空就是入栈的存储,那个不为空的就是辅助中转站。
入栈:把元素放入不为空的队列,
出栈:把有元素的队列放置在队为空的栈中,最后一个元素不入队。
template<class T>class Stack{public: Stack() {} void Push(T data) { if (!q1.empty()) { q1.push(data); } else { q2.push(data); } } void Pop() { if (!q1.empty()) { while (q1.size() != 0 && q1.size() != 1) { q2.push(q1.front()); q1.pop(); } q1.pop(); } else { while (q2.size() != 0 && q2.size() != 1) { q1.push(q2.front()); q2.pop(); } q2.pop(); } }private: queue<T> q1; queue<T> q2;};
阅读全文
0 0
- 两个队列实现一个栈&两个栈实现一个队列
- 两个栈实现一个队列-----两个队列实现一个栈
- 两个栈实现一个队列&&两个队列实现一个栈
- 两个栈实现一个队列 && 两个队列实现一个栈
- 两个栈实现一个队列,两个队列实现一个栈
- 两个栈实现一个队列/两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个队列实现一个栈&两个栈实现一个队列
- 两个队列实现一个栈 / 两个栈实现一个队列
- 两个栈实现一个队列,两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个栈实现一个队列&&两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个栈实现一个队列/两个队列实现一个栈
- 两个栈实现一个队列
- 两个栈实现一个队列
- 两个栈实现一个队列
- 两个栈实现一个队列
- js实现密码强度校验
- golang环境下的日志记录器-系列之一
- [FUNC]循环动作的实现
- post和get请求中文参数出现乱码现象解决方案
- 插入排序(java)
- 【栈队列】两个栈实现一个队列、两个队列实现一个栈
- 在Ubuntu下使用opencv调用海康威视的网络摄像头
- poj2079—Triangle(旋转卡壳)
- MongoDB数据库文档操作
- 九九乘法表编码以及思路
- Java API的基本使用方法
- MySQL数据库批量操作语句
- 简单Makefile编写教程
- spark-submit 依赖解决方案