用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 ...
随机推荐
- Windows7安装SQLServer 2008图解
Windows7安装SQL Server 2008图解 这几天因为需要,一直想安装SQL Server 2008来作为Web后台的数据库进行些实验,但总是没有时间,今天终于有时间了,便安 ...
- ubuntu/linuxmint下java环境变量设置
1.root权限下使用vi或gedit打开/etc目录下的profile文件,末尾加入环境变量. 1)命令: sudo gedit /etc/profile 2)环境变量个人案例: export JA ...
- Redis学习和应用记录(1)--介绍和安装
Redis是一个开源的分布式缓存框架,它也常被理解为数据结构服务器,因为它包含丰富的数据类型,如strings, hashes, lists, sets, sorted sets, bitmaps a ...
- P3399 丝绸之路(线性二维dp)
P3399 丝绸之路 题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚. ...
- sqlyog注册码激活
姓 名(Name):ttrar 序 列 号(Code):8d8120df-a5c3-4989-8f47-5afc79c56e7c 或者(OR) 姓 名(Name):ttrar 序 列 ...
- SVN系列学习(四)-TortoiseSVN其他操作
1.新建分支 第一步:从SVN上CheckOut一份,要作为分支模板的文件 第二步:右击[TortoiseSVN]-选择[Branch/tag] 备注说明,[指明分支路径] 第三步:删除电脑上的ZJH ...
- MVC系列学习(十七)-过滤器
本次学习的文件结构如下 1.过滤器的几种表示方式 1.1将过滤器 加到方法上,作用范围为该方法 1.2将过滤器加到当前类上,作用范围为该类的所有方法 1.3添加全局过滤器,作用范围为所有方法 2.Ac ...
- 如何成为一名出色的Oracle数据库管理员
主要针对Oracle DBA在成长阶段的定位,学习方法等几大方面进行了经典的论述,详细内容请参考下文. 一.定位 Oracle分两大块,一块是开发,一块是管理.开发主要是写写存储过程.触发器什么的,还 ...
- html5——动画案例(无缝滚动)
无缝滚动:是两组拼在一起的 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 将MongoDB服务器设置成Windows启动服务(win10)
如题,这个问题也百度了很久,百度还是挺给力的,但是都没能解决问题,后来在大神(原谅我不知道大神叫什么)的指导下,终于设置成功,特分享下设置过程.. MongoDB设置数据库我就不说了...额..算了, ...