C++ 数据结构实现两个栈实现一个队列

栈为后进先出,队列为先进先出
用两个栈实现一个队列。是一个比较经典的问题。
看到这个问题,我的第一个解题思路为:
定义两个栈,s1,s2。s1作为入队列栈,s2作为出队列栈;
入队列:每次入队列的时候,将数值压入s1栈中;
出队列:出队列时,将s1中的所有数据,压进s2栈中,然后删除s2的栈顶数据,然后再将s2中的剩余数据压入s1中。
在这其中s1是一个存储空间,s2是一个辅助空间。
进一步想一下上述办法,在出队列时,每一次都要将s1倒进s2,然后删除s2栈顶后又将s2的数据倒入s1;有另一个思路可以减少倒的次数;
入队列时:将数据压进s1;
出队列时:判断如果s2为空,那么将s1中的数据,压进s2中,然后删除s2栈顶,如果s2不为空那么再删除s2的栈顶即可;
并且还可以优化,优化如下:
出队列时,判断如果s2为空,那么将s1中n-1个数据,压进s2中,然后删除s1中的栈顶,如果s2不为空那么直接删除s2的栈顶即可;
优化版的c++实现如下:
#include<iostream>
using namespace std;
#include<stack>
//栈 后进先出 队列 先进先出
template<class T>
class Queue
{
public:
/*T Pop_back()
{
if (s2.size() <= 0)
{
while(s1.size() > 0)
{
T& temp = s1.top();
s1.pop();
s2.push(temp);
}
}
if (s2.size() == 0)
throw new exception("queue is empty ");
T tep = s2.top();
s2.pop();
return tep;
}*/
T Pop_back() //比上面少一次出栈
{
if (s2.size() <= 0)
{
while (s1.size() > 1)
{
T& temp = s1.top();
s1.pop();
s2.push(temp);
}
T tep = s1.top();
s1.pop();
return tep;
}
else{
T tep = s2.top();
s2.pop();
return tep;
}
}
void Push_back(const T& value)
{
s1.push(value);
}
bool Empty()
{
return (s1.empty() && s2.empty());
}
protected:
stack<T> s1;
stack<T> s2;
};
void TextQueue()
{
Queue<int> q1;
q1.Push_back(1);
q1.Push_back(2);
q1.Push_back(3);
q1.Push_back(4);
cout << q1.Pop_back() << endl;
cout << q1.Pop_back() << endl;
cout << q1.Pop_back() << endl;
cout << q1.Pop_back() << endl;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C++两个栈实现一个队列
# 数据结构
# 两个栈实现一个队列
# C++线性表深度解析之动态数组与单链表和栈及队列的实现
# C++ 栈和队列的实现超详细解析
# C++基础学习之利用两个栈实现一个队列
# C++用两个栈实现一个队列(面试官的小结)
# C++利用两个栈实现队列的方法
# C++中实现队列类链式存储与栈类链式存储的代码示例
# C++数据结构深入探究栈与队列
# 是一个
# 为空
# 还可以
# 第一个
# 在这
# 这个问题
# 希望能
# 要将
# 谢谢大家
# 又将
# 再将
# 可以减少
# 倒进
# std
# namespace
# brush
# cpp
# include
# iostream
相关文章:
南平网站制作公司,2025年南平市事业单位报名时间?
行程制作网站有哪些,第三方机票电子行程单怎么开?
成都网站制作报价公司,成都工业用气开户费用?
自助网站制作软件,个人如何自助建网站?
建站之星如何助力企业快速打造五合一网站?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
如何快速登录WAP自助建站平台?
如何选择服务器才能高效搭建专属网站?
定制建站价位费用解析与套餐推荐全攻略
网站制作报价单模板图片,小松挖机官方网站报价?
教学论文网站制作软件有哪些,写论文用什么软件
?
Python文件管理规范_工程实践说明【指导】
如何在企业微信快速生成手机电脑官网?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
家具网站制作软件,家具厂怎么跑业务?
如何自定义建站之星网站的导航菜单样式?
太平洋网站制作公司,网络用语太平洋是什么意思?
已有域名如何快速搭建专属网站?
简单实现Android文件上传
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
Bpmn 2.0的XML文件怎么画流程图
如何用PHP快速搭建CMS系统?
如何通过商城免费建站系统源码自定义网站主题?
如何配置支付宝与微信支付功能?
北京制作网站的公司,北京铁路集团官方网站?
开心动漫网站制作软件下载,十分开心动画为何停播?
制作证书网站有哪些,全国城建培训中心证书查询官网?
建站之星导航菜单设置与功能模块配置全攻略
建站之星如何快速生成多端适配网站?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
如何用狗爹虚拟主机快速搭建网站?
安云自助建站系统如何快速提升SEO排名?
如何通过VPS建站无需域名直接访问?
如何快速搭建高效香港服务器网站?
高端网站建设与定制开发一站式解决方案 中企动力
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
如何在新浪SAE免费搭建个人博客?
如何在Windows 2008云服务器安全搭建网站?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
山东网站制作公司有哪些,山东大源集团官网?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
建站之星安装提示数据库无法连接如何解决?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
定制建站方案优化指南:企业官网开发与建站费用解析
如何在自有机房高效搭建专业网站?
网站制作员失业,怎样查看自己网站的注册者?
*请认真填写需求信息,我们会在24小时内与您取得联系。