用一個棧實現另外一個棧的排序

【題目】

          一個棧中​元素的類型爲整型,如今想將該棧從頂到底按從大到小的順序排序,只許申請一個棧。除此以外,能夠申請新的變量,但不能申請額外的數據結構。如何完成排序?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 }

【運行結果】

相關文章
相關標籤/搜索