全网整合营销服务商

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

免费咨询热线: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 


相关文章: 建站之星ASP如何实现CMS高效搭建与安全管理?  独立制作一个网站多少钱,建立网站需要花多少钱?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  如何正确下载安装西数主机建站助手?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  如何在阿里云虚拟服务器快速搭建网站?  如何设计高效校园网站?  广东企业建站网站优化与SEO营销核心策略指南  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  如何快速搭建支持数据库操作的智能建站平台?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  html制作网站的步骤有哪些,iapp如何添加网页?  如何通过虚拟机搭建网站?详细步骤解析  如何通过商城自助建站源码实现零基础高效建站?  香港网站服务器数量如何影响SEO优化效果?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  怎么将XML数据可视化 D3.js加载XML  如何确保FTP站点访问权限与数据传输安全?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  黑客如何通过漏洞一步步攻陷网站服务器?  如何通过主机屋免费建站教程十分钟搭建网站?  如何用好域名打造高点击率的自主建站?  如何通过虚拟主机快速搭建个人网站?  建站之星代理如何优化在线客服效率?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  实现点击下箭头变上箭头来回切换的两种方法【推荐】  北京企业网站设计制作公司,北京铁路集团官方网站?  Swift中swift中的switch 语句  网站制作免费,什么网站能看正片电影?  建设网站制作价格,怎样建立自己的公司网站?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  如何做网站制作流程,*游戏网站怎么搭建?  建站主机选择指南:服务器配置与SEO优化实战技巧  教学论文网站制作软件有哪些,写论文用什么软件 ?  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何挑选优质建站一级代理提升网站排名?  金*站制作公司有哪些,金华教育集团官网?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  如何有效防御Web建站篡改攻击?  建站之星如何防范黑客攻击与数据泄露?  建站之星2.7模板:企业网站建设与h5定制设计专题  公司网站制作需要多少钱,找人做公司网站需要多少钱?  建站之星如何快速生成多端适配网站?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何快速生成凡客建站的专业级图册? 

您的项目需求

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