方法:

  1. 如果help为空,或者s.top()小于help.top(),将s的栈顶压入help中
  2. 如果s.top()大于help.top(),保存下s.top()为temp,将help的栈顶依次压入s中,直到help为空或者help的栈顶小于temp。然后把temp压入help。
  3. 重复上述步骤直到s为空
  4. 将help的元素全部弹出压入s中,得到s从栈底到栈顶的升序排列。

s从栈底到栈顶升序排列 就要求 help从栈底到栈顶降序排列,即s.top() < help.top() 就往里放

简而言之:原栈顶小则往辅助栈中放,大则保持help次序不变(依次放如原栈中),到了点就插入(插入help中)。
代码:

#include<unordered_map>
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{stack<int> s;stack<int> help;s.push(1);s.push(12);s.push(31);s.push(13);s.push(5);while(!s.empty()){if(help.empty()||s.top()<=help.top()){help.push(s.top());s.pop();}else if(s.top()>help.top()){int temp=s.top();s.pop();while(!help.empty()&&temp>help.top()){s.push(help.top());help.pop();}help.push(temp);}}while(!help.empty()){s.push(help.top());help.pop();}while(!s.empty()){cout<<s.top()<<endl;help.pop();}
}

用一个辅助栈实现对另一个栈的排序相关推荐

  1. 《程序员代码面试指南》第一章 栈和队列 设计一个有getMin功能的栈

    题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 ...

  2. 如何仅用递归函数和栈操作逆序一个栈——你要先用stack实现,再去改成递归——需要对递归理解很深刻才能写出来...

    /**  * 如何仅用递归函数和栈操作逆序一个栈  * 题目:  * 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1.  * 将这个栈转置后,从栈顶到栈底为1,2,3,4, ...

  3. 给定入栈序列,判断一个串是否为出栈序列

    剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) {if ...

  4. 如何仅用递归函数和栈操作逆序一个栈

    [题目]​ 一个栈依次压入1.2.3.4.5,那么从栈顶到栈底分别为5.4.3.2.1.将这个栈转置后,从栈顶到栈底为1.2.3.4.5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他 ...

  5. Python:如何仅用递归函数和栈操作逆序一个栈

    如何仅用递归函数和栈操作逆序一个栈 题目: 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1. 将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序, ...

  6. 编程3:仅用递归函数和栈操作逆序一个栈

    <?php header("content-type:text/html;charset=utf-8"); /** 仅用递归函数和栈操作逆序一个栈 P8*/function ...

  7. 一个栈桢对应着一个方法

    一个栈桢对应着一个方法

  8. 栈和队列之仅用递归函数和栈操作逆序一个栈

    import java.util.Stack;/*** recursion 递归的意思* @author chenyu* 题目:仅用递归函数和栈操作逆序一个栈,列如一次压入1.2.3.4.5 栈顶到栈 ...

  9. 栈和队列之设计一个有getMin(得到最小值)功能的栈

    有2中方案,分别用类和内部类实现了 import java.util.Stack;/*** @author chenyu 第一种设计:* 题目:设计一个有getMin功能的栈,设计一个特殊的栈,在实现 ...

  10. 两个栈实现一个队列/两个队列实现一个栈

    http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析: 队列的主要操作有两个:入队操作和出队操作 ...

最新文章

  1. 在一个大项目中,我选择了另一种JDK实现AdoptOpenJDK
  2. scrapy使用代理报错keyerror: proxy_爬虫Scrapy框架-Crawlspider链接提取器与规则解析器...
  3. linux下执行mysql的sql文件
  4. 雅虎因发送垃圾短信面临50万人集体诉讼
  5. Custom Basic Authentication for IIS
  6. iOS视频边下载边播放
  7. c语言编程软件平板_ipad可以编程c语言吗
  8. 乐吾乐le5le-Topology为智慧水务可视化赋能(一)
  9. python langid 语种检测以及语种对应表
  10. 什么是ROOT?ROOT权限有什么用?
  11. h5大前端常用网站以及npm模块整理
  12. 利用随机数函数掷骰子
  13. Redis系列(五):Redis的过期键删除策略
  14. html css alpha,CSS滤镜之alpha属性-网页设计,HTML/CSS
  15. 窗口函数:实现组内百分比、累计值、累计百分比
  16. karas 实现lstm 文本分类
  17. 网易我的世界 java错误_我的世界:网易有点懒,明明是同一个版本,待遇却大不一样!...
  18. html5给网页添加视频背景
  19. Linux之pstree命令
  20. JSON的parse()方法

热门文章

  1. 使用Hutool解析excel导入数据
  2. TM域名与商标域名有什么不同
  3. 金融工程学(十四):新型期权、实物期权与金融创新
  4. mysql默认空列的弊端
  5. 猎豹移动:公有云快速构建海外移动化应用基础环境
  6. java 沙箱机制_浅析沙箱机制(Sandboxie)
  7. 你想学的都在这里!大佬手把手教你如何仿写出大厂的APP,Android面试题及解析
  8. 原生js实现分页的效果
  9. emwin读取sd图片_第12章emwin(ucgui)jpeg图片显示.pdf
  10. 浅谈服务器物理内存、RAM 和 CPU