分析:借助一个栈空间(这里我们称为辅助栈),将目标栈中的元素按从栈顶到栈底依次递减的顺序添加到辅助栈中,然后将辅助栈中的元素逐个弹出并压入目标栈即可。
思路:先申请一个辅助栈helpStack,然后弹出目标栈的栈顶元素top,此时如果helpStack为空则直接将top压入helpStack,否则将helpStack的栈顶元素与top进行比较,如果top大于等于helpStack的栈顶元素大则直接将top压入helpStack,反之将helpStack栈顶元素弹出并压入目标栈中,让top与此时的helpStack栈顶元素进行比较,直至top小于helpStack的栈顶元素或者helpStack为空时,将top元素压入helpStack。以上整个操作当目标栈中元素全部弹出并压入helpStack后结束。此时helpStack栈中的元素从栈顶到栈底依次递减,然后将helpStack栈元素弹出并添加到目标栈中,直到helpStack栈为空,程序结束。
附上Java代码:
class SortingStack{ public void ascendingSort(Stack<Integer> stack){ Stack<Integer> helpStack=new Stack<>();//辅助栈 while(!stack.isEmpty()){ Integer top=stack.pop(); /* 下面的注释部分是依思路中的文字写的,当写完后发现while循环已经包括了helpStack为空的情况,所以可以进一步优化如下*/ // if(helpStack.isEmpty()){ // helpStack.push(top); // }else { while (!helpStack.isEmpty() && helpStack.peek() > top) { stack.push(helpStack.pop()); } helpStack.push(top); // } } while(!helpStack.isEmpty()){ stack.push(helpStack.pop()); } } }
原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10139665.html
时间: 2024-10-13 16:57:38