用一个栈实现另一个栈的排序
2017-03-15 19:59
260 查看
问题描述:一个栈中元素的类型为整数,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?
思路:将要排序的栈记为stack,申请的辅助栈记为help。在stack上执行pop操作,弹出的元素记为cur
(1)如果cur小于或等于help的栈顶元素,则将cur直接压入help
(2)如果cur大于help的栈顶元素,则将help的元素逐一弹出,逐一压入stack,直到cur小于或等于help的栈顶元素,再将cur压入help
运行结果如下:
思路:将要排序的栈记为stack,申请的辅助栈记为help。在stack上执行pop操作,弹出的元素记为cur
(1)如果cur小于或等于help的栈顶元素,则将cur直接压入help
(2)如果cur大于help的栈顶元素,则将help的元素逐一弹出,逐一压入stack,直到cur小于或等于help的栈顶元素,再将cur压入help
package QuestionTest; import java.util.Stack; /** * Created by L_kanglin on 2017/3/15. */ public class Test3 { public static void main(String[] args){ int [] aa={3,5,1,2,4}; Stack<Integer> stack=new Stack<>(); for(int i=0;i<aa.length;i++){ stack.push(aa[i]); } sortStackByStack(stack); while(!stack.isEmpty()){ System.out.print(" "+stack.pop()); } } public static void sortStackByStack(Stack<Integer> stack){ Stack<Integer> help = new Stack<Integer>(); while(!stack.isEmpty()){ while(!help.isEmpty()&&help.peek()>cur){ stack.push(help.pop()); } help.push(cur); } //此时help中保存的就是从栈顶到底是从小到大,全部push到stack中即可 while(!help.isEmpty()){ stack.push(help.pop()); } } }
运行结果如下:
1 2 3 4 5
相关文章推荐
- 用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序
- 程序员面试指南之用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序(每日一道算法题)
- 用一个栈实现另一个栈的排序
- 用一个栈来实现另一个栈的排序
- 用一个栈实现对另一个栈的排序
- 004使用一个栈对另一个栈完成排序(C++实现)
- 【栈】用一个栈来实现另一个栈的排序
- 1_5用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序
- 程序员代码面试指南--用一个栈实现另一个栈的排序
- 栈和队列(5)——用一个栈实现对另一个栈的排序
- 用一个栈实现另一个栈的排序
- C++ 使用一个栈实现另一个栈的排序
- 1栈和队列--用一个栈实现另一个栈的排序
- 编写一个多线程函数实现对数组排序,要求: 1.至少用两个线程 2.数组的元素值可以事先定义好,或者可以从键盘输入(增加一个线程)。 3.用一个线程对数组排序,用另一个线程输出排序结果。 4.保证先排好序,再输出。
- 栈和队列---用一个栈实现另一个栈的排序
- 左神的书——《程序员代码面试指南》之用一个栈实现另一个栈的排序c++实现
- 栈和队列之用一个栈实现另一个栈的排序