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();
    }
}
原文地址:https://www.cnblogs.com/wdt1/p/14421466.html