• 算法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()+" ");
            }
        }
    }
  • 相关阅读:
    Handler
    declare-styleable的使用
    Android APK反编译就这么简单 详解(附图)
    webview与js交互
    Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端
    eclipse中的.project 和 .classpath文件的具体作用
    android:关于主工程和library project
    block,inline和inline-block概念和区别
    容易被忽略CSS特性
    CSS里常见的块级元素和行内元素
  • 原文地址:https://www.cnblogs.com/sfnz/p/15798689.html
Copyright © 2020-2023  润新知