用一个栈实现另一个栈的排序
程序员文章站
2022-04-15 17:57:02
一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?import java.util.*;public class Main { public static void main(String[] args){ Scanner in=new Scanner(System.in); int n=in.nextInt(); Stack
一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
Stack<Integer>stack=new Stack<>();
for(int i=0;i<n;i++){
int num=in.nextInt();
stack.add(num);
}
stackSort(stack);
}
public static void stackSort(Stack<Integer>stack){
Stack<Integer>help=new Stack<>();
while(!stack.empty()){
int top=stack.pop();
if(help.empty()){
help.add(top);
}
else{
int helpTop=help.peek();
if(helpTop<top){
help.add(top);
}
else{
while(!help.empty()&&helpTop>top){
stack.add(help.pop());
if(!help.empty())
helpTop=help.peek();
}
help.add(top);
}
}
}
while(!help.empty()){
System.out.print(help.pop()+" ");
}
}
}
本文地址:https://blog.csdn.net/Lily8888888/article/details/109564738
推荐阅读
-
用PHP解决的一个栈的面试题
-
java用两个栈实现队列的push和pop
-
JS实现利用两个队列表示一个栈的方法
-
基于自定义的动态数组实现一个栈(Java语言)
-
java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶...
-
C语言用栈的思想实现十进制转二进制
-
C++实现用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型
-
算法之路_17、用数组结构实现大小固定的队列和栈
-
算法————双栈实现队列、双队列实现栈、实现一个栈Push(出栈)Pop(入栈)Min(返回最小值的操作)的时间复杂度为O(1)
-
java实现的用两个栈实现队列