[原创] 用两个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(数组): 分配在连续内存中,不能随意扩展,数组中数值类型必须是一致的.数组的声明有两种形式:直接定义长度,然后赋值:直接赋值. 缺点:插入数据 ...
随机推荐
- 第 十一 天 Flagmeng 和动画
1.flagment 的使用,生命周期. 传递数据. 2. 基本动画的使用. 3. 对话框的使用. 4.样式和主题.
- 【转载】C++中的位拷贝和值拷贝
---恢复内容开始--- 原文:C++中的位拷贝和值拷贝 原文:http://blog.csdn.net/liam1122/article/details/1966617 为了便于说明我们以Strin ...
- 20个Linux服务器安全强化建议(一)
Linux服务器安全对于保护用户数据.知识产权非常重要,同时还能减少你面对黑客的时间.在工作中,通常由系统管理员对Linux的安全负责,在这篇文章中,介绍了20条对Linux系统进行强化的建议.本文所 ...
- C#带小括号的运算
计算类的封装 jisuan.cs using System; using System.Collections.Generic; using System.Linq; using System.Tex ...
- IE7下总提示" 缺少标识符、字符串或数字"
用Jquery easyUI ,IE7下列表显示不了,总提示缺少标识符.字符串或数字.而google,maxthon,firefox,IE10等却没有问题. 原因是Json末尾多了个逗号.IE7下js ...
- Key Figure、Exception Aggreagion、Non-Cumulative KeyFigure
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 忙了好一阵,今天随便写篇关于canvas的小东西
前几天在朋友圈发了几条3D demo视频,其中就有3D空间组成各种图形.如上! 那么这些图形的每个mesh的坐标可不是手动去写,如果你愿意我当然不拦着!所以今天这篇就来介绍如何获得这些图形的坐标数据. ...
- mysql局域网连接
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION; //从任何主机连接到mysql服务 ...
- $.ajax()常用方法详解(推荐)
AJAX 是一种与服务器交换数据的技术,可以在补充在整个页面的情况下更新网页的一部分.接下来通过本文给大家介绍ajax一些常用方法,大家有需要可以一起学习. 1.url: 要求为String类型的参数 ...
- (七)HTTP协议
HTTP协议报文基本格式 HTTP协议报文基本格式 HTTP协议(Hypertext Transfer Protocol――超文本传输协议),浏览器端(客户端)向WEB服务器端访问页面的过 ...