栈s1和栈s2,栈s1专门为入队,栈s2专门为出队。

入队:

  • 当s1和s2都为空时,直接入队s1。
  • 当s1为空,s2不为空时,把s2的元素都倒回s1,然后再入队s1

出队:

  • 当s2不为空时,直接出队s2
  • 当s2为空且s1不为空时,把s1的元素都倒进s2,然后出队s2

代码实现如下:

#include <iostream>
#include <stack> using namespace std; template <class T>
struct Myqueue{
T front()
{
if(s2.size()==0)
{
if(s1.size()==0)
{
cout<<"队列为空"<<endl;
return 0;
}
while(s1.size()>0)
{
s2.push(s1.top());
s1.pop();
}
}
return s2.top();
} void pop()
{
if(s1.size()==0 && s2.size()==0)
{
cout<<"队列为空"<<endl;
}
while(s1.size()>0)
{
s2.push(s1.top());
s1.pop();
}
s2.pop();
}
void push(T &t)
{
if(s1.size()==0)
{
while(s2.size()>0)
{
s1.push(s2.top());
s2.pop();
}
}
s1.push(t);
} stack<T> s1;
stack<T> s2;
}; int main(void)
{
Myqueue<int> myqueue;
int flag;
int num;
int i=0;
for(i=0;i<10;i++)
myqueue.push(i);
for(i=0;i<10;i++)
{
cout<<myqueue.front()<<" ";
myqueue.pop();
}
cout<<endl;
while(1)
{
cout<<"请输入要执行的操作,入队或者出队,1为入队,2
为出队,3为打印队头,0为退出"<<endl;
cin>>flag;
if(flag==1)
{
cout<<"请输入要增加的结点的值"<<endl;
cin>>num;
myqueue.push(num);
}
else if(flag==2)
{
myqueue.pop();
}
else if(flag==3)
cout<<"队头结点为:"<<myqueue.front()<<endl;
else
break;
}
return 0;
}

程序猿必读

用c++编程:用两个栈实现队列的更多相关文章

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

    题目:用两个栈实现一个队列.队列的声明如下:请实现他的两个函数appendTail和deleteHead, 分别完成在队列尾部插入节点和在队列头部删除节点的功能. package Solution; ...

  2. 剑指Offer面试题:6.用两个栈实现队列

    一.题目:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 原文是使用 ...

  3. 剑指OFFER之用两个栈实现队列(九度OJ1512)

    题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入文件包含一个测试样例.对于每个测试样例,第一行输入一个n(1<=n<=100 ...

  4. 九度OJ 1512 用两个栈实现队列 【数据结构】

    题目地址:http://ac.jobdu.com/problem.php?pid=1512 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 输入: 每 ...

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

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

  6. Algorithm --> 两个栈实现队列和两个队列实现栈

    两个栈实现队列和两个队列实现栈 队列(queue)先进先出的线性表:栈(stack)先进后出的线性表. 两个栈实现队列 法一思路: s1是入栈的,s2是出栈的. 入队列:直接压入s1即可: 出队列:如 ...

  7. 二、 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek)

    请指教交流! package com.it.hxs.c01; import java.util.Stack; /* 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek) */ ...

  8. 两个队列实现栈&两个栈实现队列(JAVA)

    1,两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路:栈的特点时先进后出,队列的特点是先进先出. 若此时有两个队列stack1,st ...

  9. 剑指offer【05】- 用两个栈实现队列(java)

    题目:用两个栈实现队列 考点:栈和队列 题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路:每次psuh是时先将stack2清空放入stck1(保 ...

  10. C++版 - 剑指offer 面试题7:用两个栈实现队列 题解

    用两个栈实现队列 提交网址:  http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=13&tqId=1 ...

随机推荐

  1. c3p0-config.xml文件简单说明与备忘

    <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <named-confi ...

  2. npm 与 package.json 快速入门教程

    npm 与 package.json 快速入门教程 2017年08月02日 19:16:20 阅读数:33887 npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解 ...

  3. 过河 2005年NOIP全国联赛提高组(离散化+dp)

    1105 过河 2005年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description 在河上有一 ...

  4. [转]Android自定义Adapter的ListView的思路及代码

    本文转自:http://www.jb51.net/article/37236.htm 在开发中,我们经常使用到ListView这个控件.Android的API也提供了许多创建ListView适配器的快 ...

  5. Task.Run 和 Task.Factory.StartNew

    在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...

  6. 查询分析器执行SQL很快但是ado.net很慢:请为你的SQLparameter设置DbType

    我们都知道,参数化查询可以处理SQL注入,以及提高查询的效率,因为参数化查询会使MSSQL缓存查询的计划. 但是会出现一个问题:有的时候参数化查询比直接拼接sql字符串效率低好多,甚至是查询超时. 原 ...

  7. 附加数据库错误代码 - 5120【MSSQL】

    解决方法 数据库所在的文件夹右击打开属性 - 安全 - 给予Authenticated Users用户完全控制权限.然后再附加一次即可成功.

  8. [ ZJOI 2006 ] Mahjong

    \(\\\) \(Description\) 现有权值分别为\(1\text~100\)的\(100\)种牌,分别给出每种排的张数\(A_i\),试判断能否胡牌,胡牌需要将所有牌不重不漏地分成以下几类 ...

  9. android计算屏幕dp

    首先我们来了解一些基本元素: px:像素,屏幕上的点. dpi:一英寸长的直线上的像素点的数量,即像素密度.标准值是160dp. /*** 正是因为dpi值其代表的特性,所以android项目的资源文 ...

  10. 关于用友 U8-UAP二开的一些事

    这是关于一个刚刚接触用友U8的二次开发的一些小心得. 首先就是用友二开的论坛,http://u8dev.yonyou.com/ 当然这个论坛做得不怎么样,提出了好几个问题,都没有回复的. 以下是关于二 ...