在栈所擅长解决的典型为问题中,有一类具有以下共同特征:

  • 虽有明确的算法,但其解却以线性序列的形式给出;
  • 其次,无论是递归还是迭代实现,该序列都是依逆序计算输出的;
  • 最后,输入和输出的规模不定,难以事先确定输出数据的容器大小。

因其特有的“先进后出”的特性及其在容量方面的自适应性,使用栈来解决这类问题可谓恰到好处。

1. 进制转换

考查如下问题:任给十进制整数 nn,将其转换为 λ\lambda 进制的表示形式。

比如 λ=8\lambda =8 时,有 12345(10)=30071(8)12345_{(10)}=30071_{(8)}

一般地,设 n=(dm⋯d2d1d0)(λ)=dm×λm+⋯+d2×λ2+d1×λ1+d0×λ0n=\left(d_m\cdots d_2d_1d_0\right)_{(\lambda)}=d_m\times \lambda^m+\cdots+d_2\times \lambda^2+d_1\times \lambda^1+d_0\times \lambda^0

若记 ni=(dm⋯di+1di)(λ)n_i=\left(d_m\cdots d_{i+1}d_i\right)_{(\lambda)},则有:

di=ni%λni+1=ni/λ

d_i=n_i\%\lambda\\ n_{i+1}=n_i/\lambda

3. 递归实现

void convert(stack<char>& S, int n, int base){static char digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};if (n) {S.push(digit[n % base]);convert(S, n / base, base);}
}

对字符的处理,也可以采用如下的形式:

void convert(stack<char>& S, int n, int base){if (n){S.push('0' + n % base);convert(S, n/base, base);}
}

4. 迭代实现

void convert(stack<int>& S, int n, int base){while (n) {S.push(n % base);n /= base;}
}

栈的典型应用 —— 逆序输出相关推荐

  1. 编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略

    编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略 目录 字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略 ...

  2. c语言将一个已知头结点的单链表逆序_C语言实现单链表逆序与逆序输出实例

    单链表的逆序输出分为两种情况,一种是只逆序输出,实际上不逆序:另一种是把链表逆序.本文就分别实例讲述一下两种方法.具体如下: 1.逆序输出 实例代码如下: #include #include #inc ...

  3. 给出不多于5位的正整数,求出它是几位数,分别输出每一位按逆序输出每一位数字。

    给出不多于5位的正整数,要求: 1,求出它是几位数 2,分别输出每一位数 3,按逆序输出每一位数字,例如原数为321,应输出123. 第一种方法: (1)求一个数是几位数,有一种方法是: if (x ...

  4. 倒序存放数组java_java 将一个数组逆序输出的方法

    java 将一个数组逆序输出的方法 题目: 将一个数组逆序输出. 代码: import java.util.*; public class lianxi31 { public static void ...

  5. 递归实现逆序输出(C)

    一.概念     程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂 ...

  6. java 链表逆序代码_如何实现一个高效的单向链表逆序输出?(详解)

    需要考虑因素,高效应权衡多方面因素 数据量是否会很大 空间是否有限制 原始链表的结构是否可以更改 时间复杂度是否有限制 一个链表节点需要输出的元素有多个,例如链表中存的是自定义对象,有多个字段 题目. ...

  7. 数据结构:闲敲棋子落灯花之链表逆序输出Reverse

    链表逆序输出 首先,我们需要了解,逆序输出不是把数据对应位置改变,而是仅仅改变链接顺序. 方法一:迭代链表.使用循环,遍历链表,每一步,反转一个链接. 方法二:递归. 方法一: 过程:先使第一个结点指 ...

  8. C语言 逆序输出字符串

    前言 逆序输出字符串最可能先想到的是遍历时用栈保存字符,最后出栈.既然栈可以实现,那我们也可以用递归的方法来实现,并且一定会比较简单. 除了以上两种,还可以对字符串进行原地逆置,最后再将该字符串输出即 ...

  9. 【数据结构】单链表的逆序输出(两种方法)

    第一种方法:转换指针方向 即:将一个已经创建好的单链表进行指针域的改变 今天突然被问到单链表逆序的问题,弄了好久才看出别人的程序有啥问题,就重新写了一遍. 今天才在CSDN客户端上看到美团的面试题是冒 ...

最新文章

  1. ORB_SLAM2代码阅读(1)——系统入口
  2. matlab 随机森林算法_(六)如何利用Python从头开始实现随机森林算法
  3. miRNA实验与荧光素酶
  4. JavaScript + Tampermonkey——易班优课YOOC课群在线测试自动答题解决方案(十七)复合型解决方案油猴脚本
  5. python中的matplotlib(1)
  6. iptables配置详解
  7. java期末判断题题库_(java期末考试选择题题库.doc
  8. python建模 决策_决策树python建模中的坑 :ValueError: Expected 2D array, got 1D array instead:...
  9. my java note -------String 类的实例化
  10. linux进程栈和线程栈大小,Linux进程栈和线程栈
  11. 最火特效软件ae手机版制作抖音快手热门飞天腾云驾雾特效的教程。
  12. 初学卡尔曼滤波与扩展卡尔曼滤波
  13. Unity3D 实现阴阳师 画符
  14. [Bug] Spring相关bug收集
  15. java开发爱恩斯坦棋,爱恩斯坦棋计算机博弈系统的研究与实现
  16. 安卓苹果手机有效清除微信浏览器内部缓存
  17. ESP32 HTTP 使用入门
  18. 《推荐几个常用的H5+APP制作开发工具》
  19. Minecraft 1.16.5模组开发(三十二) 自定义投掷物品实体
  20. HTML基础-html标签、标签属性及核心功能

热门文章

  1. HTML与CSS各种代码与用法,几种关于html和css的使用方法
  2. php轮询 ob_start,详解PHP ob_start()函数的功能要点
  3. docker gpu 创建 训练环境_巧用 Docker 快速部署 GPU 环境
  4. scala中的match
  5. arcgis人口空间化_数据福利|全球人口密度数据汇总与共享
  6. mysql锁的应用场景_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景
  7. LeetCode 458. 可怜的小猪(信息论方法)
  8. 数据挖掘:模型选择——K-means
  9. SECS/GEM series: Protocol Layer
  10. Koa框架教程,Koa框架开发指南,Koa框架中文使用手册,Koa框架中文文档