您的位置:首页 > 职场人生

程序员代码面试指南--用一个栈实现另一个栈的排序

2018-02-07 14:24 711 查看
/**
用一个栈实现另一个栈的排序
【题目】
一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小
的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不
能申请额外的数据结构。如何完成排序?
*/
/*
将要排序的栈记为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());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐