双栈队列的原理是用两个栈结构模拟一个队列, 一个栈A模拟队尾, 入队的元素全部压入此栈, 另一个栈B模拟队首, 出队时将栈A的元素弹入栈B, 将栈B的栈顶元素弹出

此结构类似汉诺塔, 非常经典, 这里附上C++代码简单实现, 有问题欢迎指出

 #include <stack>

 template <typename T>
class CStkQueue
{
public:
T queuePop(); //出队列
void queuePush(T value); //入队列
size_t queueSize(); //队列长度
bool queueEmpty(); //队列判空 private:
std::stack<T> std_stack_push; //入栈,模拟队尾
std::stack<T> std_stack_pop; //出栈,模拟队首
}; template <typename T>
T CStkQueue<T>::queuePop()
{
T temp; //返回值 //如果出栈不为空,直接将出栈的栈顶元素弹出
if (!std_stack_pop.empty())
{
temp = std_stack_pop.top();
std_stack_pop.pop();
return temp;
} //将入栈元素弹出并压进出栈至仅剩一个元素
while (std_stack_push.size() != )
{
std_stack_pop.push(std_stack_push.top());
std_stack_push.pop();
} //将入栈仅有的一个元素作为返回值弹出
temp = std_stack_push.top();
std_stack_push.pop();
return temp;
} template <typename T>
void CStkQueue<T>::queuePush(T value)
{
//如果出栈不为空,先将出栈元素弹回入栈
while (!std_stack_pop.empty())
{
std_stack_push.push(std_stack_pop.top());
std_stack_pop.pop();
} //元素压栈
std_stack_push.push(value);
} template <typename T>
size_t CStkQueue<T>::queueSize()
{
return (std_stack_push.size() + std_stack_pop.size());
} template <typename T>
bool CStkQueue<T>::queueEmpty()
{
return ((std_stack_push.size() + std_stack_pop.size()) == ) ? true : false;
}

下面做个简单的测试

结果如下

C++实现一个简单的双栈队列的更多相关文章

  1. 手把手教你用redis实现一个简单的mq消息队列(java)

    众所周知,消息队列是应用系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有 ActiveMQ,RabbitMQ,Zero ...

  2. NOIP2008 双栈队列

    1.      双栈排序 (twostack.pas/c/cpp) Tom 最近在研究一个有趣的排序问题.如图所示,通过 2 个栈 S1 和 S2,Tom 希望借助 以下 4 种操作实现将输入序列升序 ...

  3. NOIP 2008 双栈排序

    题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...

  4. P1155 双栈排序(二分图染色)

    P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一 ...

  5. BZOJ 2080: [Poi2010]Railway 双栈排序

    2080: [Poi2010]Railway Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 140  Solved: 35[Submit][Statu ...

  6. Python 实现双端队列 Deque

    操作 Deque() 创建一个空的双端队列 add_front(item) 从队头加入一个item元素 add_rear(item) 从队尾加入一个item元素 remove_front() 从队头删 ...

  7. BZOJ 2457 - 双端队列 - [思维题]

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2457 Description Sherry现在碰到了一个棘手的问题,有N个整数需要排序. ...

  8. 8、泛型程序设计与c++标准模板库2.3双端队列容器

    双端队列容器是一种放松了访问权限的队列.除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问. 它提供了直接访问和顺序访问方法.其头文件为& ...

  9. 双端队列 【deque】

    题目链接:https://ac.nowcoder.com/acm/contest/1071/D 还是第一次简单运用双端队列.顾名思义:队列的头尾都可以进行插入跟删除操作. 存在于头文件 deque 中 ...

随机推荐

  1. java重点知识点整理

    隔壁班的帅哥给我的 1.1简述JAVA的语言特点 a语法简单,功能强大 b分布式与安全性 c与平台无关 d多线程 1.2什么是Java虚拟机?它包括哪几个部分? 解: Java 虚拟机 (JVM ) ...

  2. 优雅写Java之二(数组集合流)

    一.数组 二.集合 三.流 学习整理中,本文待补充--

  3. 简单实现Android手机“全局可调试”(ro.debuggable = 1)的方法【锤子坚果3】

    在Android真机上调试程序有一个前提,就是这个apk包必须有 debuggable=true 的属性才行.而除了自己开发的apk能够控制打包属性之外,其他的程序发行之后显然不会设这个值为 true ...

  4. MySql配置环境变量

    完成后安装好MySQL,为MySQL配置环境变量. 0)在我的电脑上点击右键选择属性-->高级系统设置-->环境变量1)新建MYSQL_HOME变量,并配置:D:\Develop\mysq ...

  5. SpringBoot分布式篇Ⅶ --- 整合Dubbo

    在分布式系统中, 国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot,Spring Cloud. 分布式系统: 一.Zookeepe ...

  6. oracle11G 已开启监听,但远程连接依旧无监听解决过程

    1.连接数据库显示无监听程序,首先查看服务器的oracle监听服务是否开启,服务名称:OracleOraDb11g_home1TNSListener(具体环境中可能不完全一样,但是认准TNSListe ...

  7. 注册并加入dn42网络的方法

    简介 https://dn42.net/howto/Getting-started 注册要求: 一个24小时运行的linux/BSD设备 该设备必须支持创建隧道,例如GRE,OpenVpn,IPSec ...

  8. 修改 VS2013 项目属性的默认包含路径(全局)

    1. 这里已不能更改. 2. 修改位置: C:\Users\N3verL4nd\AppData\Local\Microsoft\MSBuild\v4.0 Microsoft.Cpp.Win32.use ...

  9. python函数2(返回值、传递列表...)

    python函数2(返回值.传递列表...) 1.返回值 1.1.返回简单的值 #返回简单值 def get_formatted_name(first_name,last_name): "& ...

  10. python 更改pip源

    用pip安装依赖包时默认访问https://pypi.Python.org/simple/,但是经常出现不稳定以及访问速度非常慢的情况,国内厂商提供的pipy镜像目前可用的有: http://pypi ...