全网整合营销服务商

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

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

C++使用一个栈实现另一个栈的排序算法示例

本文实例讲述了C++用一个栈实现另一个栈的排序算法。分享给大家供大家参考,具体如下:

题目:

一个栈中元素类型为整型,现在想将该栈从顶到底按从小到大的顺序排序,只许申请一个辅助栈。

除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?

算法C++代码:

class Solution
{
public:
  //借助一个临时栈排序源栈
  static void sortStackByStack(stack<int>& s)
  {
    stack<int>* sTemp = new stack<int>;
    while (!s.empty())
    {
      int cur = s.top();
      s.pop();
      //当源栈中栈顶元素大于临时栈栈顶元素时,将临时栈中栈顶元素放回源栈
      //保证临时栈中元素自底向上从大到小
      while (!sTemp->empty() && cur > sTemp->top())
      {
        int temp = sTemp->top();
        sTemp->pop();
        s.push(temp);
      }
      sTemp->push(cur);
    }
    //将临时栈中的元素从栈顶依次放入源栈中
    while (!sTemp->empty())
    {
      int x = sTemp->top();
      sTemp->pop();
      s.push(x);
    }
  }
};

测试用例程序:

#include <iostream>
#include <stack>
using namespace std;
class Solution
{
public:
  //借助一个临时栈排序源栈
  static void sortStackByStack(stack<int>& s)
  {
    stack<int>* sTemp = new stack<int>;
    while (!s.empty())
    {
      int cur = s.top();
      s.pop();
      //当源栈中栈顶元素大于临时栈栈顶元素时,将临时栈中栈顶元素放回源栈
      //保证临时栈中元素自底向上从大到小
      while (!sTemp->empty() && cur > sTemp->top())
      {
        int temp = sTemp->top();
        sTemp->pop();
        s.push(temp);
      }
      sTemp->push(cur);
    }
    //将临时栈中的元素从栈顶依次放入源栈中
    while (!sTemp->empty())
    {
      int x = sTemp->top();
      sTemp->pop();
      s.push(x);
    }
  }
};
void printStack(stack<int> s)
{
  while (!s.empty())
  {
    cout << s.top() << " ";
    s.pop();
  }
  cout << endl;
}
int main()
{
  stack<int>* s = new stack<int>;
  s->push(5);
  s->push(7);
  s->push(6);
  s->push(8);
  s->push(4);
  s->push(9);
  s->push(2);
  cout << "排序前的栈:" << endl;
  printStack(*s);
  Solution::sortStackByStack(*s);
  cout << "排序后的栈:" << endl;
  printStack(*s);
  system("pasue");
}

运行结果:

排序前的栈:
2 9 4 8 6 7 5
排序后的栈:
9 8 7 6 5 4 2

希望本文所述对大家C++程序设计有所帮助。


# C++  #   # 排序  # C++实现归并排序算法  # C++排序算法之插入排序  # C/C++实现双路快速排序算法原理  # C/C++实现三路快速排序算法原理  # C++插入排序算法实例详解  # C++选择排序算法实例详解  # C++堆排序算法实例详解  # c++ 快速排序算法【过程图解】  # C++实现的归并排序算法详解  # C++实现双向冒泡排序算法  # 大到  # 放回  # 数据结构  # 给大家  # 所述  # 程序设计  # 从小到大  # 可以申请  # 想将  # 只许  # 整型  # 例程  # 讲述了  # std  # pre  # printStack  # endl  # cout  # Solution  # public 


相关文章: 建站上市公司网站建设方案与SEO优化服务定制指南  建站主机选择指南:服务器配置与SEO优化实战技巧  如何通过虚拟主机空间快速建站?  如何通过商城免费建站系统源码自定义网站主题?  北京制作网站的公司,北京铁路集团官方网站?  如何在IIS中新建站点并配置端口与IP地址?  实例解析angularjs的filter过滤器  建站之星下载版如何获取与安装?  建站168自助建站系统:快速模板定制与SEO优化指南  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  开封网站制作公司,网络用语开封是什么意思?  浅谈Javascript中的Label语句  如何挑选最适合建站的高性能VPS主机?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  建站之星CMS五站合一模板配置与SEO优化指南  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何在万网主机上快速搭建网站?  建站之星代理商如何保障技术支持与售后服务?  如何通过PHP快速构建高效问答网站功能?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  建站主机数据库如何配置才能提升网站性能?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  如何在云主机上快速搭建网站?  代购小票制作网站有哪些,购物小票的简要说明?  再谈Python中的字符串与字符编码(推荐)  青浦网站制作公司有哪些,苹果官网发货地是哪里?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  网站按钮制作软件,如何实现网页中按钮的自动点击?  深入理解Android中的xmlns:tools属性  开源网站制作软件,开源网站什么意思?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  如何快速搭建支持数据库操作的智能建站平台?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  小型网站建站如何选择虚拟主机?  如何用PHP快速搭建CMS系统?  建站主机默认首页配置指南:核心功能与访问路径优化  建站之星CMS建站配置指南:模板选择与SEO优化技巧  贸易公司网站制作流程,出口贸易网站设计怎么做?  常州自助建站费用包含哪些项目?  h5在线制作网站电脑版下载,h5网页制作软件?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  如何在宝塔面板中修改默认建站目录?  c# 在高并发场景下,委托和接口调用的性能对比  网站制作公司广州有几家,广州尚艺美发学校网站是多少? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。