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

題目:

      

一個棧中的類型爲整形,現在想將該棧從頂到底按從小到大的順序排序,只允許申請一個棧
除此之外,可以申請新的變量,但是不能申請額外的數據結構,如何完成排序。

思路:

       設計一個cur變量,存放stack棧彈出的當前元素,和輔助棧help的棧頂元素進行比較,若大於輔助棧棧頂元素,則將輔助棧中元素一一彈出,壓入stack棧中,若小於輔助棧棧頂元素,則將cur壓入輔助棧中,知道stack棧爲空,再將輔助棧一一彈出壓入stack棧中,排序完成。

public class test1 {
    public void sortStack() {
        Stack<Integer> help = new Stack<>();
        Stack<Integer> stack = new Stack<>();
        while (!stack.isEmpty()) {
            int cur = stack.pop();
            while (!help.isEmpty() && cur > help.peek()) {
                stack.push(help.pop());
            }
            help.push(cur);
            while (!help.isEmpty()){
                stack.push(help.pop());
            }
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章