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);
            }
        }
    }
  • 相关阅读:
    《TCP/IP网络协议基础》笔记
    《MySQL基础知识》笔记
    tc。数组的定义。
    tc。单等号,双等号的作用。
    tc。用浏览器加载gif图片。
    tc。做无界面的程序。
    做馒头一斤面放多少水。
    用笼屉蒸馒头好吃,还是用蒸柜蒸馒头好吃。上汽的大小。
    千层馒头的制作。
    馒头店,普遍是开在菜市场附近。
  • 原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10135356.html
Copyright © 2011-2022 走看看