用一个栈实现另一个栈的排序(每日一道算法题)
来源:互联网 发布:我国科研成果数据 编辑:程序博客网 时间:2024/04/29 18:22
要求:不能使用其他数据结构,只能使用一个栈加一个新的变量,实现对一个整数类型的栈排序。
package stack;import java.util.Stack;/** * @author:MindMrWang *2017年11月17日 *:function:利用一个辅助栈和一个变量将一个栈从顶到底从大到小排序 */public class sortStackByStack { public static void main(String[] args) { Stack<Integer> stack = new Stack<Integer>(); stack.push(2); stack.push(5); stack.push(4);//原来的自顶到下的顺序是4,5,2 sort(stack);//如果不进行排序,弹出得到的顺序应该是:4,5,2 while(!stack.isEmpty()) { System.out.print(stack.pop()+","); } } public static void sort(Stack<Integer> stack) { Stack<Integer> help = new Stack<Integer>();//新建一个辅助栈 while(!stack.isEmpty()) {//判断当前需要排序的栈不为空 int pop = stack.pop();//将排序的栈顶元素弹出 while(!help.isEmpty()&&help.peek()<pop) {//里面的判断顺序不能颠倒,否则出现 java.util.EmptyStackException stack.push(help.pop());//当满足help不为空,且help的元素小于pop(这样排出的顺序顶到底是从小到大的) } //将help里的元素返回到stack中 help.push(pop);//无论什么情况,只要stack不为空,都将pop压入help } while(!help.isEmpty()) {//当help不为空的时候,help里面的元素顶到底是从小到大的, stack.push(help.pop());//所以将help弹到stack中是顶到底是从大到小的 } } //最后控制台输出:5,4,2, 证明我们的排序成功了。}
过程:
①首先help为空,那么直接将stack栈顶的元素4 pop出压入help
②stack不为空,继续将5弹出并保存到pop,比较pop和help里面的4,发现4小,将4返回到stack中,继续将5压入。
③stack不为空,继续将4弹出,和5比较,不满足4>5,接着讲4压入。
④接着同上将2压入。
⑤最后将help内元素弹出压入到stack中。
总结:想让stack自上而下从大到小,所以要将help里自上而下从小到大,每次都将stck(不为空的时候)里的元素弹出并压入help,但是对于已经压入的元素要和新压入的元素进行比较,若新压入的元素大,那么就得让已压入的元素返回到stack中进行重新压入help。这样就实现了help里面自上而下从小到大,也就实现了stack里面自上而下从大到小。
参考文献:《程序员代码面试指南》
阅读全文
1 0
- 用一个栈实现另一个栈的排序(每日一道算法题)
- 用栈实现队列(每日一道算法题)
- 用递归函数和栈操作逆序一个栈(每日一道算法题)
- 用栈求解汉诺塔问题(每日一道算法题)
- 【栈】用一个栈来实现另一个栈的排序
- 用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序
- 数据结构5 用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序
- 用一个栈来实现另一个栈的排序
- 1_5用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序
- 实现能够返回最小值元素的栈(每日一道算法题)
- 每日一道算法题:奇偶排序
- 栈和队列(5)——用一个栈实现对另一个栈的排序
- 自定义TextView/EditText,实现显示(或输入)小数、数字前缀(¥$...)、千分符、最大值等
- Python TCP服务器
- 一些三维计算几何算法
- React extracting components
- socket多路复用的客户/服务器模型
- 用一个栈实现另一个栈的排序(每日一道算法题)
- AjaxUpload实现文件上传+LibreOffice文件转码+flexPaper文件在线预览
- 图像生成与图像模型——光源、阴影与影调
- 【转】我和Linux
- MQ、JMS以及ActiveMQ
- mysql数据库向redis导入的一些常见问题
- linux 下 启动tomcat时 提示找不到catalina.sh
- 欢迎使用CSDN-markdown编辑器
- OpenGL从1.0开始--三维观察