zoukankan      html  css  js  c++  java
  • 3.不借助其他的数据结构,通过递归函数来逆序一个栈

    分析:不借助其他数据结构来逆序一个栈,即空间复杂度要求最低,往往是通过牺牲时间复杂度来实现的,这个时候我们往往要向递归上考虑,这个地方需要两个递归函数,一个递归函数获取栈底元素,一个递归函数实现栈的逆序。

    思路:获取栈底元素的递归函数:定义两个变量last、previous,last存储“栈底”元素,previous存储”栈底”元素的上一个元素,先将栈弹出一个元素赋给previous,此时判读栈是否为空,如果为空则previous即为栈底元素,如果栈非空则递归调用函数获取栈底元素赋给last,然后将previous变量值压入栈中。实现栈逆序的递归函数:先判断栈是否为空,如果为空则无需逆序程序直接结束,否则获取栈底元素,然后将移除栈底元素的栈逆序(递归调用自己),最后再将获取的栈底元素入栈。

    附上Java实现代码:

    public class ReverseStack{
        /***
         * 获取并删除栈底元素
         * @param stack
         * @return 栈底元素
         */
        public Integer getAndRemovedLastElement(Stack<Integer> stack){
            Integer previous=stack.pop();//previous存放栈底元素的上一个元素
            Integer last=null;//last存放栈底元素
            if(stack.isEmpty()){
                return previous;
            }else{
                last=getAndRemovedLastElement(stack);
                stack.push(previous);
            }
            return last;
        }
    
        /**
         * 给栈逆序
         * @param stack
         */
        public void reverseStack(Stack<Integer> stack){
            if(stack.isEmpty()){
                return ;
            }else{
                Integer last=getAndRemovedLastElement(stack);
                reverseStack(stack);
                stack.push(last);
            }
        }
    }
  • 相关阅读:
    [Android学习笔记]some tips
    ubuntu desktop 开机 连接网络
    ubuntn svn 安装 配置
    ubuntu 安装phpmyadmin
    ubuntu 安装flash插件
    ubuntu samba共享安装 配置
    ubuntu tengine 安装
    ubuntu vim之php函数提示
    ubuntu vim 插件安装
    nyoj-709-异 形 卵
  • 原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10135356.html
Copyright © 2011-2022 走看看