题面
用一个栈实现另外一个栈的顶到底降序排序
要求:不能使用额外的数据结构,但可以使用新的变量。
思路(给定栈s, 辅助栈help)
1. 遍历给定栈(出栈),栈顶出栈cur,与help栈顶比较,如果大于辅助栈顶元素值,那么辅助栈栈顶元素出栈至s栈,直到help栈顶元素值<=cur
2. help压入cur
2. s栈空时,排序结束,help栈元素出栈至s栈,排序结束。
(如果要求升序,那么只要将大小比较符号改反即可)
1 void sort(stack<int> &s)
2 {
3 stack<int> help;
4 while (!s.empty())
5 {
6 int cur = s.top();
7 s.pop();
8 while (!help.empty() && cur > help.top())//如果要求从顶到底升序,改成 < 即可
9 {
10 int tmp = help.top();
11 s.push(tmp);
12 help.pop();
13 }
14 help.push(cur);
15 }
16 while (!help.empty())
17 {
18 int a = help.top();
19 s.push(a);
20 help.pop();
21 }
22 }