zoukankan      html  css  js  c++  java
  • 如何仅用递归函数和栈操作逆序一个栈

    说在前面

    这是一段递归代码,int result = stack.pop() ,一开始 stack.pop() 已经被赋值到result 整型变量,所以 getAndRemoveLastElement(stack) 的返回值为1时,由于并没有再次给 result 重新赋值,所以 result 还是为2

    
    stack.push(1);
    stack.push(2);
    getAndRemoveLastElement(stack);
    
    public int getAndRemoveLastElement(Stack<Integer> stack){
           int result = stack.pop();
           
    //栈是空的就没有执行的必要了,直接返回
           if (stack.isEmpty()){
               return result;
           }else{
               int last = getAndRemoveLastElement(stack);
    	       stack.push(result);
               return last;
           }
        }
    

    回调函数 reverse(),当 stack 为空时,无返回值,执行回调函数下面的 sout(push) 语句。reverse() 并不关心被调用者在何处,也不关心被调用者用它传递的处理程序做了什么,它只关心返回值,因为基于返回值,它将继续执行或退出。

        public void reverse(Stack<Integer> stack){
        //栈是空的就没有执行的必要了
            if (stack.isEmpty()){
                return;
            }
            int i = getAndRemoveLastElement(stack);
            reverse(stack);
            System.out.println(stack.push(i));
        }
    }
    

    命题

    一个栈依次压入 1、2、3、4、5,那么从栈顶到栈底分别为 5、4、3、2、1。将这个栈转置后,从栈顶到栈底为 1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。

    package com.lorem.stack;
    
    import org.junit.Test;
    import java.util.Stack;
    
    /**
     * 如何仅用递归函数和栈操作逆序一个栈【题目】
     *
     * 一个栈依次压入 1、2、3、4、5,那么从栈顶到栈底分别为 5、4、3、2、1。
     * 将这个栈转置后,从栈顶到栈底为 1、2、3、4、5,也就是实现栈中元素的逆序,
     * 但是只能用递归函数来实现,不能用其他数据结构。
     */
    
    /**
     * @author lorem 
     * @date 2018/8/23
     */
    public class MyStack {
    
        @Test
        public void test(){
           MyStack myStack = new MyStack();
           Stack stack = new Stack<Integer>();
           stack.push(1);
           stack.push(2);
    //      myStack.reverse(stack);
            myStack.getAndRemoveLastElement(stack);
        }
    
    
        public int getAndRemoveLastElement(Stack<Integer> stack){
           int result = stack.pop();
    //        System.out.println(result);
           if (stack.isEmpty()){
               return result;
           }else{
               int last = getAndRemoveLastElement(stack);
               stack.push(result);
               return last;
           }
        }
        public void reverse(Stack<Integer> stack){
            if (stack.isEmpty()){
                return;
            }
            int i = getAndRemoveLastElement(stack);
            reverse(stack);
            System.out.println(stack.push(i));
        }
    }
    
    
    - The End -

    知识共享许可协议 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

  • 相关阅读:
    springboot+websocket 归纳收集
    flask-admin 快速打造博客 系列一
    Flask-sqlalchemy 语法总结
    python 小问题收集
    pyenv+virtual 笔记
    flask_admin 笔记七 扩展功能
    Flask_admin 笔记六 modelView的内置方法
    spring boot 项目中 maven打第三方lib包时遇到的问题以及解决方法
    java 字符串压缩长度并解压
    highcharts中放aqi及6要素,再加上气象5要素的图
  • 原文地址:https://www.cnblogs.com/hoochanlon/p/9676648.html
Copyright © 2011-2022 走看看