用一个栈实现另一个栈的排序
思路:为了实现一个栈的从大到小的排序(栈顶到栈底),需要考虑一个事实,如果我们每次都往辅助栈中存放当前剩余的最大的值,最后直到当前栈空了,再把辅助栈转移回去就可以完成排序。
关键:如何每次把当前的最大的值存入辅助栈。只要弹出一个数,如果辅助栈为空,push,如果弹出值大于辅助栈顶,则弹出辅助栈直到遇到小于或等于的push。如果小于等于就push。
void sortStackByStack(stack<int> &st){
stack<int> help;
while(!st.empty()){
int curr=st.top();
st.pop();
while(!help.empty() && curr>help.top() ){
st.push(help.top());
help.pop();
}
help.push(curr);
}
while(!help.empty()){
int tmp=help.top();
help.pop();
st.push(tmp);
}
}