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

阿里瓜瓜發表於2017-05-09

要求:

    在一個棧中元素的型別為整型,現在想將該棧從棧頂到棧底按從大到小的順序排序,只許申請一個棧,除此之外,可以申請其他變數,但是不能申請額外的資料結構

解題思路:

     待排序的棧stack, 輔助棧help。 在stack上執行pop操作,記元素為cur

     if cur <= 【help 的棧頂元素】,cur 壓入help棧中;

     else cur > 【help 的棧頂元素】,逐一彈出help, 直到cur <= 【help 的棧頂元素】,在將cur壓入help

      一直執行以上操作,直到stack中的全部元素都匯入help棧中,(此時從棧頂到棧底:有小到大),最後,將help棧中的元素,pop一下,排序

import java.util.Stack;

public class Problem05_StackSortStack {
    /*
     * 待排序的棧stack, 輔助棧help。 在stack上執行pop操作,記元素為cur
            if cur <= 【help 的棧頂元素】,cur 壓入help棧中;
            else cur > 【help 的棧頂元素】,逐一彈出help, 直到cur <= 【help 的棧頂元素】,在將cur壓入help
      一直執行以上操作,直到stack中的全部元素都匯入help棧中,(此時從棧頂到棧底:有小到大),最後,將help棧中的元素,pop一下,排序
     */
    public static void sortStackByStack(Stack<Integer> stack) {
        Stack<Integer> help = new Stack<Integer>();
        while (!stack.isEmpty()) {
            int cur = stack.pop();
            while (!help.isEmpty() && help.peek() < cur) {
                stack.push(help.pop());
            }
            help.push(cur);
        }
        while (!help.isEmpty()) {
            stack.push(help.pop());
        }
    }
    

    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<Integer>();
        stack.push(3);
        stack.push(1);
        stack.push(6);
        stack.push(2);
        stack.push(5);
        stack.push(4);
        sortStackByStack(stack);        
        int stack_size= stack.size();
        System.out.println("stack元素是:");
        for (int size=0; size < stack_size; size ++){            
            System.out.println(stack.pop());
        }
        
        
    }

}

執行結果:

stack元素是:
6
5
4
3
2
1

相關文章