双栈队列的原理是用两个栈结构模拟一个队列, 一个栈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. 《即时消息技术剖析与实战》学习笔记8——IM系统如何保证长连接的可用性:心跳机制

    假设有以下突发意外情况: 用户进入信号不好的地方,手机没有网络信号了 上网的路由器突然掉线了 这个时候,比如微信发消息,消息就会转圈圈,甚至变成红色叹号-- 上面情况都会导致"长连接&quo ...

  2. 异想家IDEA的偏好配置

    最好将配置文件位置改为软件安装目录下,因为只有自己用,易于便携. 修改bin目录下的idea.properties,注释#去掉修改idea.config.path.idea.system.path配置 ...

  3. pku1113-Wall 凸包(安德鲁算法版)

    Wall 题目链接. Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42823 Accepted: 14602 Descript ...

  4. Java之路——初识Eclipse

    零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前 ...

  5. DataTable 相关

    1.对表的初始化 //创建表 DataTable table = new DataTable(); //添加列 table.Columns.Add("ID", typeof(Int ...

  6. SonarQube代码管理

    一 搭建过程不详细说 二 配合jenkins使用,jenkins搭建过程这里不详细说 三 jenkins项目配置,需要安装sonarqube-jenkins插件 sonar.projectKey=a6 ...

  7. artTemplate--模板使用自定义函数(2)

    我的常用自定义函数 <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> < ...

  8. HTML简介介绍

    网页概述 网页:纯文本格式的文件:(以村文本格式编写,后缀名改为HTML的文本文件) ---- 网站:多个网页的集合: ---- 主页:打开网站后显示的第一个页面: ---- 浏览器:将纯文本格式的文 ...

  9. C#系列之基础知识点(一)

    知识点一:VS启动方法 第一种:双击图标 第二种:window+R——调出cmd,输入devenu properties  属性的意思 知识点二:后缀名解释 .sln  解决方案文件:包含整个解决方案 ...

  10. DOCKER 学习笔记5 Springboot+nginx+mysql 容器编排

    前言 在上节的内容中,我们已经通过一个简单的实例,将Docker-compose 进行了实际的应用.这一小节中.我们将通过学习和了解,着重认识容器的编排,上一节只算是一个小小的测试.在这一节中.我们将 ...