全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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小时内与您取得联系。