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

发布时间 - 2026-01-11 01:03:20    点击率:

本文实例讲述了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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  浅谈redis在项目中的应用  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Python面向对象测试方法_mock解析【教程】  使用豆包 AI 辅助进行简单网页 HTML 结构设计  微信小程序 配置文件详细介绍  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  在线制作视频网站免费,都有哪些好的动漫网站?  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Laravel集合Collection怎么用_Laravel集合常用函数详解  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  如何在万网ECS上快速搭建专属网站?  装修招标网站设计制作流程,装修招标流程?  Laravel如何使用Eloquent进行子查询  实现点击下箭头变上箭头来回切换的两种方法【推荐】  香港服务器如何优化才能显著提升网站加载速度?  七夕网站制作视频,七夕大促活动怎么报名?  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  Laravel如何创建自定义Facades?(详细步骤)  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  详解CentOS6.5 安装 MySQL5.1.71的方法  如何彻底删除建站之星生成的Banner?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Laravel怎么调用外部API_Laravel Http Client客户端使用  Linux系统命令中screen命令详解  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  Laravel如何创建自定义中间件?(Middleware代码示例)  如何在IIS7上新建站点并设置安全权限?  BootStrap整体框架之基础布局组件  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何构建满足综合性能需求的优质建站方案?  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  新三国志曹操传主线渭水交兵攻略  Python自动化办公教程_ExcelWordPDF批量处理案例  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  如何在云主机上快速搭建多站点网站?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  详解jQuery中的事件  微信小程序 canvas开发实例及注意事项  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  如何快速搭建高效简练网站?  Swift中swift中的switch 语句  如何在建站宝盒中设置产品搜索功能?  Laravel怎么上传文件_Laravel图片上传及存储配置  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法