[原创] 用两个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(数组): 分配在连续内存中,不能随意扩展,数组中数值类型必须是一致的.数组的声明有两种形式:直接定义长度,然后赋值:直接赋值. 缺点:插入数据 ...
随机推荐
- GZFramework.DB.Core初始化
单数据库初始化,以MSSQL为例 public class DBConfig : IDBConfig { public static void InitDB() { GZFramework.DB.Co ...
- 设置MySQL自动增长从某个指定的数开始
自增字段,一定要设置为primary key. 以指定从1000开始为例.1 创建表的时候就设置: CREATE TABLE `Test` ( `ID` int(11) NOT NULL AUTO_I ...
- Jenkins RCE2(CVE-2016-0788)EXP
国内应该有这个EXP的不多,需要点JAVA基础,安装好maven之后,配置下就可以了,官网也给出了样例,乌云也给了分析.
- window svn链接
我学会怎么建立window SVN服务器了 今天,终于学会怎么自己搭建SVN服务了,以前一直用的都是公司的SVN服务,没接触过,觉得很神秘,曾经我一个同事弄了好几天,也没搭成,对我打击挺大的:( 觉得 ...
- 【Todo】【读书笔记】机器学习-周志华
书籍位置: /Users/baidu/Documents/Data/Interview/机器学习-数据挖掘/<机器学习_周志华.pdf> 一共442页.能不能这个周末先囫囵吞枣看完呢.哈哈 ...
- winform小程序---猜拳小游戏
因为学的时间不长,所以借鉴了一些资料做了这个小程序,大家共同学习,共同进步.感觉很有自信,世上无难事,只怕有心人. using System; using System.Collections.Gen ...
- 转:从编译链接过程解析static函数的用法
关于static函数的用法 就像我们熟知的那样,变量可以分全局的和局部的,函数也可以分全局的和局部的. 比如说,在一个工程的common.h中定义了一个全局变量 int test;那么在整个工程的作用 ...
- Easy UI
首先去Easy UI官网下载离线包 导入要用的js模块 <!DOCTYPE html> <html> <head lang="en"> < ...
- Linux 指令
cat cdchmod chowncp cut 名称:cat使用权限:所有使用者使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName说明:把档案串连 ...
- zoj 1789 The Suspects
好高兴,又AC一道 ,不过是很类似的两道..还是好高兴呀思想跟2833是一样的,不过要重新设计输入和输出.老师上课又重新讲解了一下,因为嫌疑人已知是0,所以加入集中时应该默认让数值小的做树根,即最终让 ...