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

2024-05-24 12:48
文章标签 逆序 递归函数 仅用

本文主要是介绍仅用递归函数和栈逆序一个栈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

package stackAndQueue;import java.util.Stack;import org.junit.Test;/*** 仅用递归函数和栈逆序一个栈:ReverseStack【2】* * 【一个栈依次压入1、2、3,将栈转置,使栈顶到栈底依次是1、2、3,只能用递归函数,不能借用额外的数据结构包括栈】* * 算法思想:两个递归函数(getAndRemoveBottom、reverse)* * @author xiaofan*/
public class ReverseStack {/*** 返回并移除当前栈底元素(栈内元素<栈底>1、2、3<栈顶>变为2、3<栈顶>).*/private int getAndRemoveBottom(Stack<Integer> stack) {int result = stack.pop();if (stack.empty()) {return result;} else {int bottom = getAndRemoveBottom(stack);stack.push(result);return bottom; // 第一轮时,返回栈底元素1}}/*** 每层递归取出栈底的元素并缓存到变量中,直到栈空;* * 然后逆向将每层变量压入栈,最后实现原栈数据的逆序。* * @param stack*/public void reverse(Stack<Integer> stack) 

这篇关于仅用递归函数和栈逆序一个栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/998449

相关文章

逆序和顺序创建单链表

单链表是一种顺序的存储方式,数据结构学的不好,考研又是必考内容,只好从头开始学习,相信不断地积累会有更好的爆发! 首先单链表的创建,单链表是建立在结构体的基础上,要创建单链表首先要建立起一个储存数据的结构体: struct node{int elem;node *next;};elem是数据域,用来存放你要输入的数据,next是指向下个存放数据节点的指针同为node 类型; 下面是

【Hdu】Minimum Inversion Number(逆序,线段树)

利用线段树在nlogn的时间复杂度内求一段数的逆序。 由于给的序列是由0 ~ n -1组成的,求出初始的逆序之后可以递推出移动之后的逆序数。 #include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const in

数据结构——单链表查询、逆序、排序

1、思维导图 2、查、改、删算法 //快慢排序法找中间值int mid_link(Link_t *plink){Link_Node_t *pfast = plink->phead;Link_Node_t *pslow = pfast;int m = 0;while(pfast != NULL){pfast = pfast->pnext;++m;if(m % 2 == 0){pslow

java中一维数组、二维数组、查找某元素、数组查表法、逆序

一维数组 //定义:数据类型[] 数组名;int[] arr;//静态初始化int[] arr= {11,22,33};//动态初始化int[] arr= new int[3];//默认初始值会为0System.out.println(arr);//一个地址值System.out.println(arr[0]);//0 System.out.println(arr[1]);//0

【归并分而治之】逆序对的应对之策

目录 1.前言2.题目简介3.求解思路为什么要这样做?快在哪?为什么这种方法会想到结合归并排序?如何在一左一右中统计剩下的逆序对个数?固定右边的数,用降序会怎么样???思路的本质是巧妙地结合了归并的思想 4.示例代码 1.前言 今天了解到一种比较有意思的题目解法,是专门针对逆序对的。下面来进行简单分享。 2.题目简介 题目链接:LINK 3.求解思路 我们一种解法是

【Python 千题 —— 算法篇】逆序字符串

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 字符串操作在编程中非常常见,无论是数据处理、文本分析还是算法设计,字符串的处理都是基础且关键的一部分。尤其是在数据处理和编程竞赛中,字符串逆序是一个经典问题,它可以用于许多实际场景&

单链表创建-遍历-排序-插入-删除-逆序操作

#include <iostream>using namespace std;typedef struct NodeType{int data;NodeType* pNext;}NodeType;//链表的1创建 2 遍历 3排序 4 插入 5 删除NodeType* create_list();void traverse_list(NodeType* pHead);void sor

Shell函数:递归函数、阶乘和函数库

文章目录 递归函数示例1:阶乘计算示例2:递归列出目录 函数库 递归函数 递归是指函数在其内部调用自身。递归函数常用于解决像阶乘、斐波那契数列等问题。 示例1:阶乘计算 阶乘(Factorial)是数学中的一种运算,表示从1乘以2乘以3…直到某个数n的乘积,记作n!。 例如: 4! = 1×2×3×4 = 24 (24是4的阶乘)6! = 1×2×3×4×5×6

将一个字符串逆序排列

 将一个字符串逆序排列:原地转换 #include <stdio.h> int count(char * s) {      int n = 0;      while(*s++ != '\0')      n++;      printf("n = %d\n",n);      return n; } void conver(char * s,int n) {      int

指针函数、函数指针与递归函数

一.指针函数 1.定义         指针函数是一个函数,其返回值是一个指针         例如:                 void *function()                 int *function()                 float *function() 2.指针函数的返回值         指针函数的返回值要求是 全局变量的地址/st