Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用递归逆序一个栈

使用递归逆序一个栈

作者头像
HelloVass
发布于 2018-09-12 02:28:35
发布于 2018-09-12 02:28:35
72000
代码可运行
举报
文章被收录于专栏:Hellovass 的博客Hellovass 的博客
运行总次数:0
代码可运行

题目

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

思路

递归函数一,将 stack 栈底的元素返回并且移除

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

/**
 * 获取栈底元素
 *
 * @param stack 传入的栈
 * @param <E>   返回的元素类型
 * @return 栈底元素
 */
private static <E> E getAndRemoveLastElement(Stack<E> stack) {

    E result = stack.pop();

    if (stack.isEmpty()) {
        return result;
    } else {
        E last = getAndRemoveLastElement(stack);
        stack.push(result);
        return last;
    }

}

递归函数二,逆序一个栈,会调用到上面提到的 getAndRemoveLastElement 方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

/**
 * 逆序一个栈
 *
 * @param stack 被操作的栈
 * @param <E>   栈中元素类型
 */
public static <E> void reverse(Stack<E> stack) {

    if (stack.isEmpty()) {
        return;
    }

    E element = getAndRemoveLastElement(stack);
    reverse(stack);

    stack.push(element);

}

测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

public class Main {

    public static void main(String[] args) {

        Stack<Integer> testStack = new Stack<>();

        for (int i = 1; i <= 5; i++) {
            testStack.push(i);
        }

        StackReverseUtil.reverse(testStack);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何仅用递归函数和栈操作逆序一个栈
3.如何仅用递归函数和栈操作逆序一个栈 ---- 题目: 一个栈一次压入了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, * 也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。 * @au
仇诺伊
2018/09/12
6740
如何仅用递归函数和栈操作逆序一个栈
【想法】 1. 要注意在C++中容器类作为参数传递默认的是值传递,所以要操作vector类型需要使用引用传递,就向上面代码一样。
可爱见见
2019/09/09
6330
数据结构之栈
后缀表达式适合计算式进行运算,但是人却不太容易写出来,尤其是表达式很长的情况下,因此在开发中,我们需要将中缀表达式转成后缀表达式。
用户11332765
2024/10/28
910
数据结构之栈
# 栈 栈的一个实际需求 栈的介绍 栈的应用场景 代码实现 栈实现综合计算器 # 栈的一个实际需求 请输入一个表达式 计算式:[722-5+1-5+3-3]点击计算【如下图】 请问:计算机底层是如何
用户9615083
2022/12/30
4410
栈
疯狂数据结构-栈-Java
需要注意的是,在使用栈时要避免两个常见的问题:栈上溢(stack overflow)和栈下溢(stack underflow)。栈上溢发生在尝试向已满的栈中插入元素时,而栈下溢发生在尝试从空栈中弹出元素时。
学编程的小程
2023/10/11
2900
疯狂数据结构-栈-Java
Java数据结构和算法(四)——栈
根据提供的文章内容,总结了关于使用栈实现字符串逆序和分隔符匹配的要点,并返回了json格式的摘要总结。
IT可乐
2018/01/04
9190
Java数据结构和算法(四)——栈
java栈的实现_java技术栈
学习自:http://www.cnblogs.com/skywang12345/p/3562239.html
全栈程序员站长
2022/10/03
4400
【数据结构与算法】栈
计算机科学中,stack 是一种线性的数据结构,只能在其一端添加数据和移除数据。习惯来说,这一端称之为栈顶,另一端不能操作数据的称之为栈底,就如同生活中的一摞书
程序员波特
2024/09/26
830
数据结构基础温故-2.栈
现实生活中的事情往往都能总结归纳成一定的数据结构,例如餐馆中餐盘的堆叠和使用,羽毛球筒里装的羽毛球等都是典型的栈结构。而在.NET中,值类型在线程栈上进行分配,引用类型在托管堆上进行分配,本文所说的“栈”正是这种数据结构。栈和队列都是常用的数据结构,它们的逻辑结构与线性表相通,不同之处则在于操作受某种特殊限制。因此,栈和队列也被称为操作受限的线性表。这里,我们首先来了解一下栈。
Edison Zhou
2018/08/20
4010
数据结构基础温故-2.栈
[数据结构与算法] 邂逅栈
栈的英文为(stack): 又名堆栈,它是一种运算受限的线性表。限定仅在表尾(栈顶)进行插入和删除操作的线性表
时间静止不是简史
2020/07/25
4830
java 中缀转后缀(逆波兰)[通俗易懂]
总体思路是这种:遇到数字的话直接输出,遇到右括号 输出左括号上面的所有元素 ,遇到左括号入栈。遇到乘除符号。进行推断假设栈中有左括号或栈顶元素是加减就入栈其余出栈。遇到加减符号,假设栈中有左括号则入栈,否则将栈中元素所有出栈。做完这些处理后,在将栈中还没出栈的增加到输出结果中。亲測实用
全栈程序员站长
2022/07/08
3100
Data Structures (三) - 栈Stack实现
栈也是线性表的一种,但是与其他线性表不同的是,栈分为栈顶和栈底且只允许从栈顶进行操作,即入栈(push)或者出栈(pop)操作,所以栈的操作遵循后进先出的原则(Last In First Out)
RiemannHypothesis
2022/08/19
2800
Data Structures (三) - 栈Stack实现
数据结构与算法(2)——栈和队列栈队列LeetCode 相关题目整理其他题目整理
栈是一种用于存储数据的简单数据结构(与链表类似)。数据入栈的次序是栈的关键。可以把一桶桶装的薯片看作是一个栈的例子,当薯片做好之后,它们会依次被添加到桶里,每一片都会是当前的最上面一片,而每次我们取的时候也是取的最上面的那一片,规定你不能破坏桶也不能把底部捅穿,所以第一个放入桶的薯片只能最后一个从桶里取出;
我没有三颗心脏
2018/07/24
1.3K0
从 0 开始学习 JavaScript 数据结构与算法(三)栈
数组是一个线性结构,并且可以在数组的任意位置插入和删除元素。但是有时候,我们为了实现某些功能,必须对这种任意性加以限制。栈和队列就是比较常见的受限的线性结构。
XPoet
2021/04/26
5830
听说递归能做的,栈也能做!
我们在栈与队列:匹配问题都是栈的强项中提到了,递归的实现就是:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。
代码随想录
2021/07/16
5530
【练习】计算给定算数表达式的结果
给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
孟君
2020/04/23
1.2K0
用队列实现栈,用栈实现队列,听起来有点绕,都搞懂了就掌握了精髓!
栈和队列是数据结构中最常用到的两种结构,有非常广泛的运用,该篇文章将通过动画的手段,展示栈和队列相互实现的底层原理,让我们真正搞懂栈和队列的特性。
Java_老男孩
2020/06/11
7.5K0
《Java初阶数据结构》----4.<线性表---Stack栈和Queue队列>
用户11288958
2024/09/24
950
《Java初阶数据结构》----4.<线性表---Stack栈和Queue队列>
数据结构小记【Python/C++版】——栈篇
元素在栈中的移动顺序依照后进先出(LIFO)原则,较早入栈的元素,更接近栈底,更晚被弹出。
Coder-ZZ
2023/02/23
2860
数据结构小记【Python/C++版】——栈篇
【算法】200-每周一练 之 数据结构与算法(Stack)
这些都是数据结构与算法,一部分方法是团队其他成员实现的,一部分我自己做的,有什么其他实现方法或错误,欢迎各位大佬指点,感谢。
pingan8787
2019/07/23
3240
【算法】200-每周一练 之 数据结构与算法(Stack)
相关推荐
如何仅用递归函数和栈操作逆序一个栈
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验