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

【题目】

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

【解答】​

 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 }

【运行结果】

相关文章
相关标签/搜索