#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 = ; i<n-; 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 = ; i < n-; 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();
queueDD.push();
queueDD.push();
queueDD.pop();
queueDD.push();
queueDD.pop();
queueDD.pop();
queueDD.pop();
queueDD.pop();
return ;
}

注意,语句(a)(b)处不能用以下语句代替:

for(int i = ; i<doubleQueueToStack::queueA.size()-; i++){  ////!!!!! 错误!!!!!
doubleQueueToStack::queueB.push(queueA.front());
doubleQueueToStack::queueA.pop();
}

queueA.size是unsigned类型(size_type), 直接进行运算会出问题,

上述语句执行结果,比正确结果少一次queueA.pop。

[原创] 用两个queue实现stack的功能的更多相关文章

  1. Scala 深入浅出实战经典 第39讲:ListBuffer、ArrayBuffer、Queue、Stack操作代码实战

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  2. C# Queue 和Stack的实现

    Queue 和Stack的使用就不用多说吧,一个是先进先出,一个是后进先出. 这里我主要关注其实现原理. queue的实现如下: public class Queue<T> : IEnum ...

  3. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  4. 数据结构与算法(4) -- list、queue以及stack

    今天主要给大家介绍几种数据结构,这几种数据结构在实现原理上较为类似,我习惯称之为类list的容器.具体有list.stack以及queue. list的节点Node 首先介绍下node,也就是组成li ...

  5. deque、queue和stack深度探索(下)

    deque如何模拟连续空间?通过源码可以看到这个模型就是通过迭代器来完成. 迭代器通过重载操作符+,-,++,--,*和->来实现deque连续的假象,如上图中的 finish-start ,它 ...

  6. C++关于vector、queue、stack、priority_queue的元素访问

    vector.queue.stack.priority_queue对元素进行元素访问时,返回的是对应元素的引用.

  7. C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能

    简介 在今天的文章中,我们将介绍 C# 10 中引入的一项新功能.这是已添加到 List.Queue 和 Stack 集合中的 EnsureCapacity 方法.我们将讨论为什么我们应该使用这个方法 ...

  8. [原创] 用两个stack实现queue的功能

    #include <iostream> #include <stack> using namespace std; class doubleStackToQueue { pri ...

  9. 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字

    一. 各类数据结构比较及其线程安全问题 1. Array(数组): 分配在连续内存中,不能随意扩展,数组中数值类型必须是一致的.数组的声明有两种形式:直接定义长度,然后赋值:直接赋值. 缺点:插入数据 ...

随机推荐

  1. 我的android学习经历32

    android系统架构 1.Linux内核层(LINUX KERNEL) 这是系统架构的最低层,这层为android设备的硬件提供了驱动 2.系统运行库层(LIBRARIES) 这一层为倒数第二层,利 ...

  2. Java开发中经典的小实例-(随机产生验证码)

    import java.util.Scanner;public class Test10 {    public static void main(String[] args) {        // ...

  3. C#类遍历

    foreach语句的基本用法大家都应该知道,就是对对象进行遍历,取出相应的属性名称或属性值.Foreach(for)用法在js中使用很简单,基本如下: var objA={name:'mayday', ...

  4. Python简单时间日期处理

    import datetime #日期初始化: d1 = datetime.datetime(2005, 2, 16) d2 = datetime.datetime(2004, 12, 31) #日期 ...

  5. D3.js 用层画条形图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. python3 字典相关函数

    python版本3.5 #Author by Liguangbo#_*_ coding:utf-8 _*_'''info={'No.1':'ligb','No.2':'donglx','No.3':' ...

  7. 0030 Linux 网络操作命令

    1. 主机是否可达 ping IP 2. 服务是否在运行 telnet IP port 3. 网络配置 ifconfig ip route arp 4. 网络访问 curl wget 5. 网络追踪 ...

  8. Django1.9开发博客(9)- 用户认证

    你应该注意到了一点,当你去新建.修改和删除文章的时候并不需要登录,这样的话任何浏览网站的用户都能随时修改和删除我的文章.这个可不是我想要的! 编辑和删除的认证 我们需要保护post_new, post ...

  9. 两种JS方法实现斐波那契数列

    第一种方法:递归 function fibonacci(n){ if (n==0){ return 0; }else if (n==1){ return 1; } return fibonacci(n ...

  10. StringUtils工具类的常用方法

    StringUtils 方法的操作对象是 java.lang.String 类型的对象,是对 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String ...