zoukankan      html  css  js  c++  java
  • 栈的倒置(递归法)

    将栈中的元素倒置,一种最简单的办法是利用数组存储栈弹出的元素,而后再压入栈中,空间复杂度O(N),时间复杂度O(2N)。

    另一种方法是利用递归将栈中的元素倒置。

    假设原栈中的元素为

    5(5在栈顶)

    4

    3

    2

    1

    那么倒置后栈中的元素应为

    1

    2

    3

    4

    5

    如果已经将1,2倒置了,即栈中的元素为

    1

    2

    如何将3压入栈低,可以先将1、2弹出,而后压入3,再依次压入2,1.

    实现代码如下

        private static void push(Stack<Integer> st, int data) {
            if (st.isEmpty()) {
                st.push(data);
                return;
            }
            int temp = st.pop();
            push(st, data);
            st.push(temp);
        }

    所以对于整个栈的实现为
    将1压入栈底;

    将1弹出,将2压入栈底,再将1压入栈

    将1、2弹出,将3压入栈底,再依次压入2、1

    将1、2、3弹出,将4压入栈底,再依次压入3、2、1.

    实现代码如下

        private static void push(Stack<Integer> st, int data) {
            if (st.isEmpty()) {
                st.push(data);
                return;
            }
            int temp = st.pop();
            push(st, data);
            st.push(temp);
        }
    
        public static void reverseStack(Stack<Integer> st) {
            if (st.isEmpty()) return;
            int temp = st.pop();
            reverseStack(st);
            push(st, temp);
        }

    复杂度分析

    空间复杂度是O(N),不是O(1),这时由于递归函数reverseStack每次调用时都会产生变量temp=st.pop(),这些变量会存储在栈中,同样占用空间。

    时间复杂度是O(N^2)

    每次调用push()函数,都会将栈中的元素弹出,在压入,这个过程会进行N次。

    故栈的倒置,最简单的数组法,也是复杂度最低的。

  • 相关阅读:
    关于自适应屏幕方向和大小的一些经验
    在线升级Android应用程序完善版
    H263&H264&MPEG4
    PyCharm2019 激活
    VMware Workstation下载安装破解秘钥
    linux/kali安装及更新源以及输入法等配置
    python推倒式(列表、字典、集合)
    协程
    Flask中获取参数(路径,查询,请求体,请求头)
    Flask中获取参数(路径,查询,请求体,请求头)
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9679911.html
Copyright © 2011-2022 走看看