[原创] 用两个queue实现stack的功能
#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的功能的更多相关文章
- Scala 深入浅出实战经典 第39讲:ListBuffer、ArrayBuffer、Queue、Stack操作代码实战
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- C# Queue 和Stack的实现
Queue 和Stack的使用就不用多说吧,一个是先进先出,一个是后进先出. 这里我主要关注其实现原理. queue的实现如下: public class Queue<T> : IEnum ...
- 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) -- list、queue以及stack
今天主要给大家介绍几种数据结构,这几种数据结构在实现原理上较为类似,我习惯称之为类list的容器.具体有list.stack以及queue. list的节点Node 首先介绍下node,也就是组成li ...
- deque、queue和stack深度探索(下)
deque如何模拟连续空间?通过源码可以看到这个模型就是通过迭代器来完成. 迭代器通过重载操作符+,-,++,--,*和->来实现deque连续的假象,如上图中的 finish-start ,它 ...
- C++关于vector、queue、stack、priority_queue的元素访问
vector.queue.stack.priority_queue对元素进行元素访问时,返回的是对应元素的引用.
- C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能
简介 在今天的文章中,我们将介绍 C# 10 中引入的一项新功能.这是已添加到 List.Queue 和 Stack 集合中的 EnsureCapacity 方法.我们将讨论为什么我们应该使用这个方法 ...
- [原创] 用两个stack实现queue的功能
#include <iostream> #include <stack> using namespace std; class doubleStackToQueue { pri ...
- 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字
一. 各类数据结构比较及其线程安全问题 1. Array(数组): 分配在连续内存中,不能随意扩展,数组中数值类型必须是一致的.数组的声明有两种形式:直接定义长度,然后赋值:直接赋值. 缺点:插入数据 ...
随机推荐
- 自定义Dialog
功能:从底部弹出的对话框,加入动画 步骤:1 定义dialog布局文件 2 设置标题,透明度style.xml,选择器selector.xml ,圆角shape.xml 等样式文件 3 设置显示位置, ...
- Linux 休眠,挂起(待机),关机等几个命令的区别及如何实现;如何启用Ubuntu的休眠模式
这里对linux 的几个命令整理下,有:休眠,挂起,待机,关机等几个命令的区别及如何实现. 休眠是一种更加省电的模式,它将内存中的数据保存于硬盘中,所有设备都停止工作.当再次使用时需按开关机键,机器将 ...
- hdu4511小明系列故事——女友的考验(ac自动机+最短路)
链接 预处理出来任意两点的距离,然后可以顺着trie树中的节点走,不能走到不合法的地方,另开一维表示走到了哪里,依次来更新. 注意判断一下起点是不是合法. #include <iostream& ...
- redis 配置应用(摘)
Redis可以在没有配置文件的情况下通过内置的配置来启动,但是这种启动方式只适用于开发和测试. 合理的配置Redis的方式是提供一个Redis配置文件,这个文件通常叫做redis.conf. redi ...
- Unity ShaderLab学习总结
http://www.jianshu.com/p/7b9498e58659 Unity ShaderLab学习总结 Why Bothers? 为什么已经有ShaderForge这种可视化Shader编 ...
- 【转】 HTTP 协议简介
一.TCP/IP 协议介绍 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是分层的,从底层至应用层分别为:物理层.链路层.网络层.传输层和应用层,如下图所示: 从 ...
- linux split (分割文件)命令
linux split 命令 功能说明:切割文件. 语 法:split [--help][--version][-<行数>][-b <字节>][-C <字节>][- ...
- [maven] 使用Nexus创建maven私有仓库
1.为什么需要maven私有仓库? 从Maven中央仓库下载所需的jar包,需要外网的支持.如果公司不能上外网的话则不能从中央仓库下载所需jar包,公司网速慢的时候也会影响项目构建的速度.用户可以用n ...
- iOS开发Swift篇—(五)元组类型
iOS开发Swift篇—(五)元组类型 一.元组类型介绍 1.什么是元组类型 元组类型由 N个 任意类型的数据组成(N >= 0),组成元组类型的数据可以称为“元素” 示例: let posit ...
- Linux学习 : 裸板调试 之 使用MMU
MMU(Memory Management Unit,内存管理单元),操作系统通过使用处理器的MMU功能实现以下:1)虚拟内存.有了虚拟内存,可以在处理器上运行比实际物理内存大的应用程序.为了使用虚拟 ...