zoukankan      html  css  js  c++  java
  • 算法13用一个栈实现另一个栈的排序

    描述

    一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?

    输入描述:

    第一行输入一个N,表示栈中元素的个数
    第二行输入N个整数a_iai表示栈顶到栈底的各个元素

    输出描述:

    输出一行表示排序后的栈中栈顶到栈底的各个元素。

    示例1

    输入:
    5
    5 8 4 3 6
    
    输出:
    8 6 5 4 3

    思路

    原来的栈为 stack,辅助栈为 help。不断从 stack 中弹出元素,弹出的元素记为 cur。

    • 如果 help 为空或 cur 小于 help 的栈顶元素,则将cur直接压入help。
    • 如果 cur 大于 help 的栈顶元素,则从 help 一直弹出元素压入stack,直到 cur 小于 help 的栈顶元素。
    • stack 为空时,过程结束,此时 help 中元素的顺序从栈顶到栈底为从小到大的顺序,将 help 中的元素依次弹出并压入 stack 就可以实现题目要求的 stack 的顺序。
    import java.util.Scanner;
    import java.util.Stack;
    
    public class Main{
        
        public static void sortStack(Stack<Integer> stack){
            Stack<Integer> help = new Stack<Integer>();
            while(!stack.isEmpty()){
                int cur = stack.pop();
                while(!help.isEmpty()&&help.peek()<cur){
                    stack.push(help.pop());
                }
                help.push(cur);
            }
            while(!help.isEmpty()){
                stack.push(help.pop());
            }
        }
        
        public static void main(String[] args){
            
            Stack<Integer> stack = new Stack<>();
            
            Scanner scanner = new  Scanner(System.in);
            int n = scanner.nextInt();
            for(int i=0;i<n;i++){
                stack.push(scanner.nextInt());
            }
            sortStack(stack);
            while(!stack.isEmpty()){
                System.out.print(stack.pop()+" ");
            }
        }
    }
  • 相关阅读:
    CSS3动画
    Grid布局
    JS向上取整、向下取整、四舍五入等
    JS DOM资料
    关于setInterval和setTimeout中的this指向问题
    JavaScript 高级技巧 Memoization
    请求接口的方式
    HTTP协议知识
    CSS样式重置
    Chrome 为什么使用多进程,不使用多线程
  • 原文地址:https://www.cnblogs.com/sfnz/p/15798689.html
Copyright © 2011-2022 走看看