zoukankan      html  css  js  c++  java
  • b_nk_用递归函数和栈逆序一个栈 & 用一个栈实现另一个栈的排序(栈+递归 | 栈)

    用递归函数和栈逆序一个栈

    实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。

    思路:这里因为栈的输出本质也是将栈元素逆序,所以我得先将 st1 逆序为 st2,然后将 st2 用递归逆序...

    import java.util.*;
    import java.io.*;
    class Solution {
        int n;
        int getBottom(Stack<Integer> st) {
            int top = st.pop();
            if (st.isEmpty())
                return top;
            int bottom = getBottom(st);
            st.push(top);
            return bottom;
        }
        void reverse(Stack<Integer> st) {
            if (st.isEmpty()) return;
            int e = getBottom(st);
            reverse(st);
            st.push(e);
        }
        void init() throws IOException {
            Scanner sc = new Scanner(new BufferedInputStream(System.in));
            Stack<Integer> st1 = new Stack<Integer>(), st2 = new Stack<Integer>();
            n = sc.nextInt();
            for (int i=0; i<n; i++) st1.push(sc.nextInt());
            while (!st1.isEmpty()) st2.push(st1.pop());
            reverse(st2);
            while (!st2.isEmpty()) {
                System.out.print(st2.pop()+" ");
            }
        }
    }
    public class Main{
        public static void main(String[] args) throws IOException {  
            Solution s = new Solution();
            s.init();
        }
    }
    

    用一个栈实现另一个栈的排序

    输入
    5
    5 8 4 3 6
    输出
    8 6 5 4 3
    
    import java.util.*;
    import java.math.*;
    import java.io.*;
    class Solution {
        void init() throws IOException {
            Scanner sc = new Scanner(new BufferedInputStream(System.in));
            Stack<Integer> data = new Stack<>(), st = new Stack<>();
            int n = sc.nextInt();
            for (int i=0; i<n; i++) data.push(sc.nextInt());
            while (!data.isEmpty()) {
                int x = data.pop();
                if (st.isEmpty()) {
                    st.push(x);
                } else {
                    while (!st.isEmpty() && st.peek() > x)
                        data.push(st.pop());
                    st.push(x);
                }
            }
            while (!st.isEmpty()) System.out.print(st.pop()+" ");
        }
    }
    public class Main{
        public static void main(String[] args) throws IOException {  
            Solution s = new Solution();
            s.init();
        }
    }
    
  • 相关阅读:
    大话设计模式C++ 适配器模式
    36. Valid Sudoku
    c++ 常用的数据结构
    《大话设计模式》c++实现 状态模式
    c++ 各种类型转换
    38. Count and Say
    《大话设计模式》c++实现 抽象工厂模式
    66. Plus One
    49. Group Anagrams
    《大话设计模式》c++实现 建造者模式
  • 原文地址:https://www.cnblogs.com/wdt1/p/14421466.html
Copyright © 2011-2022 走看看