如何仅用递归函数和栈操作逆序一个栈

【题目】?

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

【解答】

?首先分为两步。第一步,得到栈底元素并移除这个栈底元素;第二步,将得到的栈底元素逆序入栈。

【代码】

 1 package cn.hl.p3;
 2
 3 import java.util.Stack;
 4
 5 /**
 6  * title:一个栈依次压入1、2、3、4、5,
 7  *       那么从栈顶到栈底分别为5、4、3、2、1。
 8  *       将这个栈转置后,从栈顶到栈底为1、2、3、4、5,
 9  *       也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他的数据结构。
10  *
11  * @author 猩生柯北
12  */
13
14 public class suanfa {
15     /**
16      * 将栈stack的栈底元素返回并移除
17      * @param stack
18      * @return
19      */
20     public static int getAndRemoveLastElement(Stack<Integer> stack){
21         //弹出栈顶元素
22         int result = stack.pop();
23         //判断
24         //弹出元素后如果栈为空,则返回该元素
25         if(stack.isEmpty()){
26             return result;
27         }else{
28             //不为空时,则递归。此时栈为原栈弹出栈顶元素后的一个变化的栈。
29             //当递归到栈底元素时,将栈顶元素返回并赋值给变量last
30             int last = getAndRemoveLastElement(stack);
31             //递归结束。将除栈底元素的其他元素按原先顺序依次入栈。
32             //此时的栈与原栈的区别是:栈底元素被移除
33             stack.push(result);
34             //返回原栈底元素
35             return last;
36         }
37     }
38
39     /**
40      * 逆序一个栈。
41      * @param stack
42      */
43     public static void reverse(Stack<Integer> stack){
44         //判断。
45         if(stack.isEmpty()){
46             return;
47         }
48         //得到栈底元素
49         int i = getAndRemoveLastElement(stack);
50         //递归。此时的栈是原栈返回并移除栈底元素的一个变化栈。
51         reverse(stack);
52         //递归结束。递归到栈空时,将得到的栈底元素依次(注意顺序!!!)入栈。
53         stack.push(i);
54     }
55
56     //测试.入栈元素依次为:5,7,9.
57     public static void main(String[] args) {
58         Stack s1 = new Stack();
59         s1.push(5);
60         s1.push(7);
61         s1.push(9);
62         System.out.println("The elements in the original stack:");
63         for( int i=0 ; i <= s1.size()+1; i++ ){
64             System.out.println(s1.pop());
65         }
66
67         s1.push(5);
68         s1.push(7);
69         s1.push(9);
70         reverse(s1);
71         System.out.println("===================================");
72         System.out.println("The elements in the changed stack:");
73         for( int i=0 ; i <= s1.size()+1; i++ ){
74             System.out.println(s1.pop());
75         }
76     }
77 }
78     

【运行结果】

原文地址:https://www.cnblogs.com/zhzcode/p/9574375.html

时间: 2024-10-24 13:35:22

如何仅用递归函数和栈操作逆序一个栈的相关文章

1.3 仅用递归函数和栈操作逆序一个栈

题目:一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其它数据结构. 1 //仅用递归函数和栈操作逆序一个栈 2 #include <stdio.h> 3 #include "stack.h" //该头文件包含栈操作的原型声明等相关信息 4 5 SqStack stack; 6 7 //获取栈底元素并删除 8 int getAndRemov

编程3:仅用递归函数和栈操作逆序一个栈

<?php header("content-type:text/html;charset=utf-8"); /* * 仅用递归函数和栈操作逆序一个栈 P8 */ function getAndRemoveLastElement(SplStack $stack){ if($stack->isEmpty()){ return false; } $value = $stack->pop(); if($stack->isEmpty()){ return $value;

[Daily]仅用递归函数和栈操作逆序一个栈

[题目] 一个栈依次压入1,2,3,4,5:那么从栈顶到栈底分别为5,4,3,2,1..将栈转置 [要求] 只能用递归函数来实现. [分析] 该算法需要两个递归函数.分别是getAndRemoveLastElement()和Reverse() 函数名 描述 getAndRemoveLastElement 将栈Stack的栈底元素返回并移除.作为中间步骤被Reverse使用 Reverse 算法的入口.主要功能为将栈顶元素优先压入栈中(放在栈底) 关于getAndRemoveLastElement

【栈】仅用递归函数和栈操作逆序一个栈

题目: 一个栈依次压入1.2.3.4.5,那么从栈顶到栈底分别为5.4.3.2.1.将这个栈转置后,从栈顶到栈底为1.2.3.4.5,也就是实现栈中元素的逆序.但是只能用递归函数来实现,不能用其他数据结构 题解: 需要两个递归函数:1. 将栈底元素返回并删除:2. 逆序一个栈 过程即为获取栈底元素,逆序2.3.4.5,递归后获取栈底元素2,逆序3.4.5,再次递归获取栈底元素3,逆序4.5,再次递归获取栈底元素4,逆序5,最后获取栈底元素5, 逆序空栈.依次返回插入获取的栈底元素,也就是依次插入

&quot;Coding Interview Guide&quot; -- 仅用递归函数和栈操作逆序一个栈

[题目] 一个栈依次压入1.2.3.4.5,那么从栈顶到栈底分别为5.4.3.2.1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能使用其它数据结构 [分析] 栈是一种操作受限的数据结构,只能从某一端进行插入和删除和访问元素.能进行插入删除和访问等操作的一端称为“栈顶”,相对的另一端,不能进行任何栈操作,称为栈底.栈中除了栈顶元素外,其它的栈元素都是不允许访问的.所以想要访问栈中其它元素,则只能将将栈中元素依次弹出直到该元素成为栈顶元素

仅用递归函数和栈操作逆序一个栈

要求: 一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,而不能用另外的数据结构. import java.util.Stack; public class Problem03_ReverseStackUsingRecursive { /* * 递归得到栈底元素 */ public static int getAndRemoveLastElement(Stack<Inte

用递归函数和栈操作逆序一个栈

问题描述: 一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,而不能用另外的数据结构. 实现代码: #include <stack> #include <stdio.h> using namespace std; int GetAndRemoveBottom(stack<int> &ss) { int top, bottom; top =

【算法题】03-使用递归和栈逆序一个栈

题目 仅用递归操作和栈逆序 一个栈. 一个栈依次压入1.2.3.4.5 那么从栈顶到栈底分别是5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1.2.3.4.5,也就是实现栈中元素的逆序,但是只能用递归来实现 ,不能用其他数据结构. 思路 需要两个递归函数 递归函数一:将栈stack的栈底元素返回并移除 /** * @Desc 获取栈底元素返回并移除 * @param stack * @return */ public static int getAndRemoveLastElement(St

栈和队列----用递归函数和栈的操作实现逆序一个栈

用递归函数和栈的操作实现逆序一个栈 一个栈依次压入1.2.3.4.5,那么从栈顶到栈底分别为5.4.3.2.1,将这个栈转置后,从栈顶到栈底为1.2.3.4.5,也就是实现栈中元素的逆序,但是只能使用递归函数来实现,不能实现其他数据结构. package com.test; import java.util.Stack; /** * Created by Demrystv. */ public class ReverseStack { //将栈stack的栈底元素返回并且删除 private s