用一个辅助栈实现对另一个栈的排序
方法:
- 如果help为空,或者s.top()小于help.top(),将s的栈顶压入help中
- 如果s.top()大于help.top(),保存下s.top()为temp,将help的栈顶依次压入s中,直到help为空或者help的栈顶小于temp。然后把temp压入help。
- 重复上述步骤直到s为空
- 将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();}
}
用一个辅助栈实现对另一个栈的排序相关推荐
- 《程序员代码面试指南》第一章 栈和队列 设计一个有getMin功能的栈
题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 ...
- 如何仅用递归函数和栈操作逆序一个栈——你要先用stack实现,再去改成递归——需要对递归理解很深刻才能写出来...
/** * 如何仅用递归函数和栈操作逆序一个栈 * 题目: * 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1. * 将这个栈转置后,从栈顶到栈底为1,2,3,4, ...
- 给定入栈序列,判断一个串是否为出栈序列
剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) {if ...
- 如何仅用递归函数和栈操作逆序一个栈
[题目] 一个栈依次压入1.2.3.4.5,那么从栈顶到栈底分别为5.4.3.2.1.将这个栈转置后,从栈顶到栈底为1.2.3.4.5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他 ...
- Python:如何仅用递归函数和栈操作逆序一个栈
如何仅用递归函数和栈操作逆序一个栈 题目: 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1. 将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序, ...
- 编程3:仅用递归函数和栈操作逆序一个栈
<?php header("content-type:text/html;charset=utf-8"); /** 仅用递归函数和栈操作逆序一个栈 P8*/function ...
- 一个栈桢对应着一个方法
一个栈桢对应着一个方法
- 栈和队列之仅用递归函数和栈操作逆序一个栈
import java.util.Stack;/*** recursion 递归的意思* @author chenyu* 题目:仅用递归函数和栈操作逆序一个栈,列如一次压入1.2.3.4.5 栈顶到栈 ...
- 栈和队列之设计一个有getMin(得到最小值)功能的栈
有2中方案,分别用类和内部类实现了 import java.util.Stack;/*** @author chenyu 第一种设计:* 题目:设计一个有getMin功能的栈,设计一个特殊的栈,在实现 ...
- 两个栈实现一个队列/两个队列实现一个栈
http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析: 队列的主要操作有两个:入队操作和出队操作 ...
最新文章
- 在一个大项目中,我选择了另一种JDK实现AdoptOpenJDK
- scrapy使用代理报错keyerror: proxy_爬虫Scrapy框架-Crawlspider链接提取器与规则解析器...
- linux下执行mysql的sql文件
- 雅虎因发送垃圾短信面临50万人集体诉讼
- Custom Basic Authentication for IIS
- iOS视频边下载边播放
- c语言编程软件平板_ipad可以编程c语言吗
- 乐吾乐le5le-Topology为智慧水务可视化赋能(一)
- python langid 语种检测以及语种对应表
- 什么是ROOT?ROOT权限有什么用?
- h5大前端常用网站以及npm模块整理
- 利用随机数函数掷骰子
- Redis系列(五):Redis的过期键删除策略
- html css alpha,CSS滤镜之alpha属性-网页设计,HTML/CSS
- 窗口函数:实现组内百分比、累计值、累计百分比
- karas 实现lstm 文本分类
- 网易我的世界 java错误_我的世界:网易有点懒,明明是同一个版本,待遇却大不一样!...
- html5给网页添加视频背景
- Linux之pstree命令
- JSON的parse()方法