/**
用一个栈实现另一个栈的排序
【题目】
一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小
的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不
能申请额外的数据结构。如何完成排序?
*/
/*
将要排序的栈记为stack,申请的辅助栈记为help。在stack上执
行pop操作,弹出的元素记为cur。
-如果cur小于或等于help的栈顶元素,则将cur直接压入help;
-如果cur大于help的栈顶元素,则将help的元素逐一弹出,逐一
压入stack,直到cur小于或等于help的栈顶元素,再将cur压入help。
一直执行以上操作,直到stack中的全部元素都压入到help。最后
将help中的所有元素逐一压入stack,即完成排序。
*/
import java.util.Stack;
public class C05_StackSortStack {
public static void main(String[] args) {
Stack<Integer>stack = new Stack<Integer>();
stack.add(2);
stack.add(1);
stack.add(6);
stack.add(0);
stack.add(5);
sortStack(stack);
while(!stack.empty()){
System.out.println(stack.pop());
}
}
//栈从顶到底按从大到小的顺序排序
public static void sortStack(Stack<Integer>stack){
Stack<Integer>help = new Stack<Integer>();
while(!stack.empty()){
int cur = stack.pop();
while(!help.empty() && cur>help.peek()){//得到的help栈是顶到底按从小到大的顺序排序
stack.push(help.pop());
}
help.push(cur);
}
//最后将help栈的元素全部倒回stack
while(!help.empty()){
stack.push(help.pop());
}
}
}
程序员代码面试指南--用一个栈实现另一个栈的排序
原创
©著作权归作者所有:来自51CTO博客作者wx62eb7326068f3的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
一场关于栈的面试----最小栈的实现
一场关于栈的面试----最小栈的实现
最小值 出栈 入栈 -
程序员代码面试指南--设计一个具有getMin功能的栈
/* 设计一个有getMin功能的栈 【题目】 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回 栈中最小元素的
Java 程序员代码面试指南 算法 栈 System -
程序员代码面试指南--如何仅用递归函数和栈操作逆序一个栈
/** 如何仅用递归函数和栈操作逆序一个栈 【题目】 一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、 3
Java 逆序栈 左神 程序员面试指南 Stack