用c++编程:用两个栈实现队列
栈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++编程:用两个栈实现队列的更多相关文章
- 剑指offer编程题Java实现——面试题7用两个栈实现队列
题目:用两个栈实现一个队列.队列的声明如下:请实现他的两个函数appendTail和deleteHead, 分别完成在队列尾部插入节点和在队列头部删除节点的功能. package Solution; ...
- 剑指Offer面试题:6.用两个栈实现队列
一.题目:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 原文是使用 ...
- 剑指OFFER之用两个栈实现队列(九度OJ1512)
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入文件包含一个测试样例.对于每个测试样例,第一行输入一个n(1<=n<=100 ...
- 九度OJ 1512 用两个栈实现队列 【数据结构】
题目地址:http://ac.jobdu.com/problem.php?pid=1512 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 输入: 每 ...
- 两个栈实现队列+两个队列实现栈----java
两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后所有出s ...
- Algorithm --> 两个栈实现队列和两个队列实现栈
两个栈实现队列和两个队列实现栈 队列(queue)先进先出的线性表:栈(stack)先进后出的线性表. 两个栈实现队列 法一思路: s1是入栈的,s2是出栈的. 入队列:直接压入s1即可: 出队列:如 ...
- 二、 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek)
请指教交流! package com.it.hxs.c01; import java.util.Stack; /* 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek) */ ...
- 两个队列实现栈&两个栈实现队列(JAVA)
1,两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路:栈的特点时先进后出,队列的特点是先进先出. 若此时有两个队列stack1,st ...
- 剑指offer【05】- 用两个栈实现队列(java)
题目:用两个栈实现队列 考点:栈和队列 题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路:每次psuh是时先将stack2清空放入stck1(保 ...
- C++版 - 剑指offer 面试题7:用两个栈实现队列 题解
用两个栈实现队列 提交网址: http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=13&tqId=1 ...
随机推荐
- c3p0-config.xml文件简单说明与备忘
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <named-confi ...
- npm 与 package.json 快速入门教程
npm 与 package.json 快速入门教程 2017年08月02日 19:16:20 阅读数:33887 npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解 ...
- 过河 2005年NOIP全国联赛提高组(离散化+dp)
1105 过河 2005年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在河上有一 ...
- [转]Android自定义Adapter的ListView的思路及代码
本文转自:http://www.jb51.net/article/37236.htm 在开发中,我们经常使用到ListView这个控件.Android的API也提供了许多创建ListView适配器的快 ...
- Task.Run 和 Task.Factory.StartNew
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- 查询分析器执行SQL很快但是ado.net很慢:请为你的SQLparameter设置DbType
我们都知道,参数化查询可以处理SQL注入,以及提高查询的效率,因为参数化查询会使MSSQL缓存查询的计划. 但是会出现一个问题:有的时候参数化查询比直接拼接sql字符串效率低好多,甚至是查询超时. 原 ...
- 附加数据库错误代码 - 5120【MSSQL】
解决方法 数据库所在的文件夹右击打开属性 - 安全 - 给予Authenticated Users用户完全控制权限.然后再附加一次即可成功.
- [ ZJOI 2006 ] Mahjong
\(\\\) \(Description\) 现有权值分别为\(1\text~100\)的\(100\)种牌,分别给出每种排的张数\(A_i\),试判断能否胡牌,胡牌需要将所有牌不重不漏地分成以下几类 ...
- android计算屏幕dp
首先我们来了解一些基本元素: px:像素,屏幕上的点. dpi:一英寸长的直线上的像素点的数量,即像素密度.标准值是160dp. /*** 正是因为dpi值其代表的特性,所以android项目的资源文 ...
- 关于用友 U8-UAP二开的一些事
这是关于一个刚刚接触用友U8的二次开发的一些小心得. 首先就是用友二开的论坛,http://u8dev.yonyou.com/ 当然这个论坛做得不怎么样,提出了好几个问题,都没有回复的. 以下是关于二 ...