码迷,mamicode.com
首页 > 编程语言 > 详细

用一个栈实现另一个栈的排序

时间:2018-09-02 18:34:47      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:技术   sys   []   print   判断   辅助   一个栈   span   步骤   

【题目】

          一个栈中?元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?

【解答】?

 1 package cn.hl.p4;
 2 
 3 import java.util.Stack;
 4 
 5 /**
 6  * 题目:一个栈中?元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,
 7  *     只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。
 8  *     如何完成排序?
 9  * 
10  * 思想:题中给出了两个栈,我们可以将要排序的栈记为stack,辅助栈记为help。
11  *     要实现stack中的元素从顶到底按从大到小排序,则入栈的元素顺序应该为:从小到大。
12  *     所以,help栈中元素从顶到底要实现由小到大的顺序。那么这就是解题关键了,
13  *     我们只要实现这个就好。
14  * 
15  * 步骤:在stack上执行pop操作,弹出的元素记为cur。
16  *     1.若cur小于或者等于help的栈顶元素,则将cur直接压入help。
17  *     (!!!保持help从栈顶到栈底由小到大的顺序)
18  *     2.若cur大于help的栈顶元素(注意:若此时将cur压入help,则会违反help栈
19  *     顶到底由小到大的顺序),则将help的元素逐一弹出,逐一压入stack,直到cur小于
20  *     或者等于help的栈顶元素,再将cur压入help。
21  *     3.重复以上操作,直到stack中的全部元素都压入到help。最后将help中的所有
22  *     元素逐一压入stack,即完成排序。
23  *     
24  * @author 猩生柯北
25  *
26  */
27 public class Demo {
28     /**
29      * 用一个栈实现另一个栈的排序
30      * @param stack
31      */
32     public static void sortStackByStack(Stack<Integer> stack){
33         //辅助栈help
34         Stack<Integer> help = new Stack<Integer>();
35         //判断。若stack不为空,则执行循环。
36         while(!stack.isEmpty()){
37             //cur接收stack弹出的元素
38             int cur = stack.pop();
39             while( !help.isEmpty() && help.peek() > cur){
40                 stack.push(help.pop());
41             }
42             help.push(cur);
43         }
44         while(!help.isEmpty()){
45             stack.push(help.pop());
46         }
47     }
48     
49     /**
50      * 测试
51      * @param args
52      */
53     public static void main(String[] args) {
54         Stack s1 = new Stack();
55         s1.push(5);
56         s1.push(6);
57         s1.push(7);
58         sortStackByStack(s1);
59         System.out.println(s1.pop());
60         System.out.println(s1.pop());
61         System.out.println(s1.pop());
62     }
63 }

【运行结果】

技术分享图片

 

用一个栈实现另一个栈的排序

标签:技术   sys   []   print   判断   辅助   一个栈   span   步骤   

原文地址:https://www.cnblogs.com/zhzcode/p/9574390.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!