要求:
在一個棧中元素的型別為整型,現在想將該棧從棧頂到棧底按從大到小的順序排序,只許申請一個棧,除此之外,可以申請其他變數,但是不能申請額外的資料結構
解題思路:
待排序的棧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