C++两个队列实现一个栈

/*
* source.cpp
*
* Created on: 2015年6月21日
* Author: codekiller
*/ #include "iostream"
#include "queue"
#include <exception>
#include "stdexcept"
using namespace std; #define should_not_reach_here template <typename T> class QStack{ public:
QStack(void){};
~QStack(void){};
void push(const T& element);
T pop();
private:
queue<T> queue1;
queue<T> queue2; }; template <typename T> void QStack<T>::push(const T& element){ if(!queue2.empty())
queue2.push(element);
else if(!queue1.empty())
queue1.push(element);
else if(queue1.empty()&&queue2.empty())
queue1.push(element); } template <typename T> T QStack<T>::pop(){
if(queue1.size()==0&&queue2.size()==0)
{ throw underflow_error(string("QStack UnderFlow"));
//return 0;
}
if(queue1.size()==0){
while(queue2.size()>1){
queue1.push(queue2.front());
queue2.pop();
}
T & dataout=queue2.front();
queue2.pop();
return dataout;
}else if(queue2.size()==0){
while(queue1.size()>1){
queue2.push(queue1.front());
queue1.pop();
}
T & dataout=queue1.front();
queue1.pop();
return dataout;
} should_not_reach_here
} int main(){ QStack<int> sstack;
sstack.push(1);
cout<<sstack.pop()<<endl;
sstack.push(100);
try{
cout<<sstack.pop()<<endl;
cout<<sstack.pop()<<endl;
cout<<sstack.pop()<<endl;
}
catch(underflow_error &err){
cerr<<err.what()<<endl;
} }

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

  1. 《剑指Offer》附加题_用两个队列实现一个栈_C++版

    在<剑指Offer>中,在栈和队列习题中,作者留下来一道题目供读者自己实现,即"用两个队列实现一个栈". 在计算机数据结构中,栈的特点是后进先出,即最后被压入(push ...

  2. 剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈

    剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()- ...

  3. java两个栈实现一个队列&&两个队列实现一个栈

    栈:先进后出  队列:先进先出 两个栈实现一个队列: 思路:先将数据存到第一个栈里,再将第一个栈里的元素全部出栈到第二个栈,第二个栈出栈,即可达到先进先出 源码: class Queue<E&g ...

  4. python两个队列实现一个栈和两个栈实现一个队列

    1.两个栈实现一个队列 两个栈stack1和stack2, push的时候直接push进stack1,pop时需要判断stack1和stack2中的情况.如果stack2不为空的话,直接从stack2 ...

  5. 【校招面试 之 剑指offer】第9-2题 用两个队列实现一个栈

    #include<iostream> #include<queue> using namespace std; // 对于出栈解决的思路是:将queue1的元素除了最后一个外全 ...

  6. 两个队列实现一个栈,剑指offer P59

    public class StackByQueue { private LinkedList<String> queue1; private LinkedList<String> ...

  7. 两队列模拟一个栈,python实现

    python实现两个队列模拟一个栈: class Queue(object): def __init__(self): self.stack1=[] self.stack2=[] def enqueu ...

  8. 两个栈实现队列+两个队列实现栈----java

                                               两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后所有出s ...

  9. 【剑指offer】两个队列实现堆栈

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/25076689     题目:用两个队列模拟一个栈,即用两个队列的出队和入队操作.来实现栈的 ...

随机推荐

  1. 使Flask的url支持正则表达式以及一个api小demo

    from flask import Flask from flask import jsonify from flask import request from werkzeug.routing im ...

  2. 网关鉴权后下游统一filter获取用户信息

    1. 场景描述 最近有点忙,在弄微服务nacos+springcloud gateway这块工作,以前只是简单应用,这次因为要对接10几个系统或者平台,还的鉴权,等后续稍微闲点了,把这块东西总结下. ...

  3. 分布式session共享机制分析

    使用配置: 1.在pom文件中引入spring-session的jar包 <!--springsession--><dependency><groupId>org. ...

  4. Spring Boot 监听 Activemq 中的特定 topic ,并将数据通过 RabbitMq 发布出去

    1.Spring Boot 和 ActiveMQ .RabbitMQ 简介 最近因为公司的项目需要用到 Spring Boot , 所以自学了一下, 发现它与 Spring 相比,最大的优点就是减少了 ...

  5. 品Spring:对@Resource注解的处理方法

    @Resource是Java的注解,表示一个资源,它具有双向的含义,一个是从外部获取一个资源,一个是向外部提供一个资源. 这其实就对应于Spring的注入和注册.当它用在字段和方法上时,表示前者.当它 ...

  6. ng service(服务)

    ng service(服务) 创建服务命令:ng g service services/+服务名 使用服务的注意事项: 使用(services)服务需要在app.,module.ts(根模块)中引用并 ...

  7. Scala 学习笔记之集合(7) Option

    object CollectionDemo8 { def main(args: Array[String]): Unit = { //Option集合的使用,可以用来安全的判断null或非null,放 ...

  8. GAN算法笔记

    本篇文章为Goodfellow提出的GAN算法的开山之作"Generative Adversarial Nets"的学习笔记,若有错误,欢迎留言或私信指正. 1. Introduc ...

  9. 一文掌握在Word中快速编写公式

    在使用Word编写文章时,总会遇到书写数学公式的情况.使用Word的公式输入工具需要频繁地使用鼠标,因而编写公式会显得繁琐麻烦,那么有什么办法可以优雅地在Word中书写公式呢?其实Word早在Word ...

  10. 自学导航页(待续ing)

    1 博客导航1.1 linuxlinux全线教程–提供了linux教程,服务器管理教程,BSD教程,还有编程语言(C/Java/Python/Perl),以及网络等全栈学习教程 1.2 存储技术NoS ...