3.6问题:
编写程序,按升序对栈进行排序(即最大元素位于栈顶)。最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中(如数组)。
思考:
待排序栈s1,将自己的数据从栈顶不断的出栈按升序插入临时数据栈s2。插入操作时,可将s1作为缓冲,直到插入操作完成。
import java.util.*;
class sort{
public static void main(String args[]){
Stack<Integer> s = new Stack<Integer>();
s.push(5);
s.push(4);
s.push(3);
s.push(2);
s.push(1);
Stack<Integer> r = stackSort(s);
while(!r.isEmpty()){
System.out.println(r.pop());
}
}
public static Stack<Integer> stackSort(Stack<Integer> s){
Stack<Integer> r = new Stack<Integer>();
while(!s.isEmpty()){
int tmp = s.pop();
while(!r.isEmpty()&&r.peek()>tmp){
s.push(r.pop());
}
r.push(tmp);
}
return r;
}
}
注意排序前栈内的数据存储顺序,排序后数据的存储顺序,以及打印出来的数据顺序。